{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for RentListingInquries Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第一步：直接调用xgboost内嵌cv寻找初步的弱学习器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\") #训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#抽取1万行,只为学习，暂时取少点数据，熟悉一下整个流程\n",
    "train = train.sample(n=10000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2650</th>\n",
       "      <td>2.0</td>\n",
       "      <td>3</td>\n",
       "      <td>4495</td>\n",
       "      <td>1498.333333</td>\n",
       "      <td>1123.750000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>13</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26570</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2450</td>\n",
       "      <td>1225.000000</td>\n",
       "      <td>1225.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27963</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3000</td>\n",
       "      <td>1500.000000</td>\n",
       "      <td>1500.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>5</td>\n",
       "      <td>20</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17315</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2075</td>\n",
       "      <td>1037.500000</td>\n",
       "      <td>691.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37482</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3650</td>\n",
       "      <td>1825.000000</td>\n",
       "      <td>1825.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "2650         2.0         3   4495      1498.333333     1123.750000       -1.0   \n",
       "26570        1.0         1   2450      1225.000000     1225.000000        0.0   \n",
       "27963        1.0         1   3000      1500.000000     1500.000000        0.0   \n",
       "17315        1.0         2   2075      1037.500000      691.666667       -1.0   \n",
       "37482        1.0         1   3650      1825.000000     1825.000000        0.0   \n",
       "\n",
       "       room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "2650        5.0  2016      4   13       ...           0      0    0       0   \n",
       "26570       2.0  2016      5    5       ...           0      0    0       0   \n",
       "27963       2.0  2016      5   20       ...           0      0    1       0   \n",
       "17315       3.0  2016      6   12       ...           0      0    0       0   \n",
       "37482       2.0  2016      5    7       ...           0      0    0       0   \n",
       "\n",
       "       water  wheelchair  wifi  windows  work  interest_level  \n",
       "2650       0           0     0        0     0               0  \n",
       "26570      0           0     0        0     0               2  \n",
       "27963      0           0     0        0     0               2  \n",
       "17315      0           0     0        0     0               0  \n",
       "37482      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " 看看interest_level 分布是否均衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAELCAYAAADOeWEXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAGYhJREFUeJzt3X+0XWV95/H3BxBbf7QJGpnIjwY1taXjiPYWULqsgvLLqaEuqbg6EilromtRxVWnIzoOrIK22tafbaXNKmjoWAGpSmqpNKWgI61IQEABGSJayEAhGkCUERf4nT/Oc80h3Ny7d3LPPfdy36+1ztp7f8+z9/7e3JV8s/fz7GenqpAkqavdxp2AJGlhsXBIknqxcEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknqxcEiSetlj3AmMwtOf/vRasWLFuNOQpAXlmmuu+U5VLZup3eOycKxYsYKNGzeOOw1JWlCS/FuXdt6qkiT1MrLCkeS5Sa4b+nwvyVuT7JVkQ5Jb23Jpa58kH0myKckNSV44dKzVrf2tSVaPKmdJ0sxGVjiq6paqOqiqDgJ+GXgQ+AxwGnBZVa0ELmvbAMcAK9tnDXA2QJK9gDOAQ4CDgTMmi40kae7N1a2qI4BvVtW/AauAdS2+Djiura8CzquBLwNLkiwHjgI2VNXWqroX2AAcPUd5S5K2M1eF4wTgk21976q6C6Atn9Hi+wB3DO2zucV2FJckjcHIC0eSPYFXAZ+aqekUsZomvv151iTZmGTjli1b+icqSepkLq44jgGuraq72/bd7RYUbXlPi28G9hvab1/gzmnij1JVa6tqoqomli2bcRiyJGknzUXheB3bblMBrAcmR0atBi4eip/YRlcdCtzfbmVdChyZZGnrFD+yxSRJYzDSBwCTPAl4BfDGofB7gQuTnAzcDhzf4pcAxwKbGIzAOgmgqrYmOQu4urU7s6q2jjJvSdKOpeox3QUL3sTERPnkuDT/Hfanh407hce9K998Zee2Sa6pqomZ2vnkuCSpFwuHJKkXC4ckqRcLhySpFwuHJKkXC4ckqRcLhySpFwuHJKkXC4ckqRcLhySpFwuHJKkXC4ckqRcLhySpFwuHJKkXC4ckqRcLhySpFwuHJKkXC4ckqRcLhySpFwuHJKkXC4ckqZeRFo4kS5JclOQbSW5O8qIkeyXZkOTWtlza2ibJR5JsSnJDkhcOHWd1a39rktWjzFmSNL1RX3F8GPh8Vf0C8HzgZuA04LKqWglc1rYBjgFWts8a4GyAJHsBZwCHAAcDZ0wWG0nS3BtZ4UjyM8BLgHMAqupHVXUfsApY15qtA45r66uA82rgy8CSJMuBo4ANVbW1qu4FNgBHjypvSdL0RnnF8SxgC/CxJF9N8ldJngzsXVV3AbTlM1r7fYA7hvbf3GI7ikuSxmCUhWMP4IXA2VX1AuAHbLstNZVMEatp4o/eOVmTZGOSjVu2bNmZfCVJHYyycGwGNlfVVW37IgaF5O52C4q2vGeo/X5D++8L3DlN/FGqam1VTVTVxLJly2b1B5EkbTOywlFV/w7ckeS5LXQEcBOwHpgcGbUauLitrwdObKOrDgXub7eyLgWOTLK0dYof2WKSpDHYY8THfzPwiSR7ArcBJzEoVhcmORm4HTi+tb0EOBbYBDzY2lJVW5OcBVzd2p1ZVVtHnLckaQdGWjiq6jpgYoqvjpiibQGn7OA45wLnzm52kqSd4ZPjkqReLBySpF4sHJKkXiwckqReLBySpF4sHJKkXiwckqReLBySpF4sHJKkXiwckqReZiwcSZ6cZLe2/vNJXpXkCaNPTZI0H3W54vgi8FNJ9mHwqteTgI+PMilJ0vzVpXCkqh4EXg38aVX9BnDgaNOSJM1XnQpHkhcBvwX8fYuNejp2SdI81aVwvBV4B/CZqroxybOAy0ebliRpvprxyqGqvgB8IcmT2/ZtwFtGnZgkaX7qMqrqRUluAm5u289P8tGRZyZJmpe63Kr6EHAU8F2AqroeeMkok5IkzV+dHgCsqju2Cz0yglwkSQtAl9FRdyR5MVBJ9mTQv3HzaNOSJM1XXa443gScAuwDbAYOatuSpEWoy6iq7zB4hkOSpE6jqtYlWTK0vTTJuV0OnuTbSb6W5LokG1tsryQbktzalktbPEk+kmRTkhuSvHDoOKtb+1uTrO7/Y0qSZkuXW1X/qarum9yoqnuBF/Q4x8uq6qCqmmjbpwGXVdVKBnNfndbixwAr22cNcDYMCg1wBnAIcDBwxmSxkSTNvS6FY7fhf6jbP+S7MuXIKmBdW18HHDcUP68GvgwsSbKcwVDgDVW1tRWtDcDRu3B+SdIu6FIA3g/8S5KL2vbxwHs6Hr+Af0xSwF9W1Vpg76q6C6Cq7kryjNZ2H2B42O/mFttR/FGSrGFwpcL+++/fMT1JUl9dOsfPS3IN8DIgwKur6qaOxz+squ5sxWFDkm9M0zZTnX6a+PZ5rgXWAkxMTDzme0nS7Oh6y+kbwL2T7ZPsX1W3z7RTVd3Zlvck+QyDPoq7kyxvVxvLgXta883AfkO77wvc2eIv3S5+Rce8JUmzrMuoqjcDdzPoW/gcg6nVP9dhvycneerkOnAk8HVgPTA5Mmo1cHFbXw+c2EZXHQrc325pXQoc2UZzLW3HubT7jyhJmk1drjhOBZ5bVd/teey9gc8kmTzP31TV55NcDVyY5GTgdgZ9JgCXAMcCm4AHGbxpkKramuQs4OrW7syq2tozF0nSLOk05Qhwf98Dt+nXnz9F/LvAEVPEix08kV5V5wKdnh2RJI1Wl8JxG3BFkr8HHpoMVtUHRpaVJGne6lI4bm+fPdtHkrSIdRmO+/sw6OCuqh+MPiVJ0nzmGwAlSb34BkBJUi++AVCS1ItvAJQk9eIbACVJvUx7xZFkd+D1VeUbACVJwAxXHFX1CIP3ZEiSBHTr47gyyZ8BFwA/eY6jqq4dWVaSpHmrS+F4cVueORQr4PDZT0eSNN/N1MexG3B2VV04R/lIkua5mfo4fgz8zhzlIklaALoMx92Q5L8l2S/JXpOfkWcmSZqXuvRx/HZbDj+7UcCzZj8dSdJ812V23APmIhFJ0sIwY+FIcuJU8ao6b/bTkSTNd11uVf3K0PpPMXjt67WAhUOSFqEut6rePLyd5GeBvx5ZRpKkea3TtOrbeRBYOduJSJIWhi5vAPy7JOvb53PALcDFXU+QZPckX237kuSAJFcluTXJBW2qdpI8sW1vat+vGDrGO1r8liRH9f0hJUmzp0sfx58MrT8M/FtVbe5xjlMZvL/jZ9r2+4APVtX5Sf4COBk4uy3vrarnJDmhtXttkgOBE4BfAp4J/FOSn28TMEqS5liXW1W3A1dV1Req6krgu8NXA9NJsi/wSuCv2nYYzHF1UWuyDjiura9q27Tvj2jtVwHnV9VDVfUtYBNwcJfzS5JmX5fC8Sngx0Pbj7RYFx8C/vvQ/k8D7quqh9v2ZgYviKIt7wBo39/f2v8kPsU+P5FkTZKNSTZu2bKlY3qSpL66FI49qupHkxttfc+Zdkryn4F7quqa4fAUTWuG76bbZ1ugam1VTVTVxLJly2ZKT5K0k7oUji1JXjW5kWQV8J0O+x0GvCrJt4HzGdyi+hCwJMlk38q+wJ1tfTOwXzvHHsDPAluH41PsI0maY13fOf7OJLcnuR14O/DGmXaqqndU1b5VtYJB5/Y/t1fQXg68pjVbzbYRWuvbNu37f66qavET2qirAxgMBf5Kp59OkjTrujwA+E3g0CRPAVJVD+ziOd8OnJ/k3cBXgXNa/Bzgr5NsYnClcUI7/41JLgRuYjCq6xRHVEnS+HSZq+oPgD+qqvva9lLgbVX1rq4nqaorgCva+m1MMSqqqn4IHL+D/d8DvKfr+SRJo9PlVtUxk0UDoKruBY4dXUqSpPmsS+HYPckTJzeS/DTwxGnaS5Iex7o8Of6/gMuSfIzBMNjfZtuDepKkRaZL5/gfJbkBeHkLnVVVl442LUnSfNXligMGo5+ewOCK46ujS0eSNN91mR33Nxk8N/Ea4DeBq5K8Zvq9JEmPV12uOP4H8CtVdQ9AkmXAP7FtokJJ0iLSZVTVbpNFo/lux/0kSY9DXa44Pp/kUuCTbfu1wCWjS0mSNJ91GVX1e0leDfwqg5lq11bVZ0aemSRpXuo0qqqqPg18esS5SJIWAPsqJEm9WDgkSb3ssHAkuawt3zd36UiS5rvp+jiWJ/k1Bm/xO5/tXuFaVdeONDNJ0rw0XeE4HTiNwataP7Ddd8XgVbCSpEVmh4Wjqi4CLkryP6vqrDnMSZI0j3V5juOsJK8CXtJCV1TV50abliRpvuoyyeEfAqcyeOf3TcCpLSZJWoS6PAD4SuCgqvoxQJJ1DKZWf8coE5MkzU9dn+NYMrT+s6NIRJK0MHQpHH8IfDXJx9vVxjXAH8y0U5KfSvKVJNcnuTHJ77f4AUmuSnJrkguS7NniT2zbm9r3K4aO9Y4WvyXJUTvzg0qSZseMhaOqPgkcymCuqk8DL6qq8zsc+yHg8Kp6PnAQcHSSQ4H3AR+sqpXAvcDJrf3JwL1V9Rzgg60dSQ4ETgB+CTga+GiS3bv/iJKk2dTpVlVV3VVV66vq4qr69477VFV9v20+gW2vnj2cbS+BWgcc19ZXtW3a90ckSYufX1UPVdW3gE3AwV1ykCTNvpHOVZVk9yTXAfcAG4BvAvdV1cOtyWZgn7a+D3AHQPv+fuBpw/Ep9pEkzbGRFo6qeqSqDmLw9PnBwC9O1awts4PvdhR/lCRrkmxMsnHLli07m7IkaQbTFo4kuyX5+q6epKruA65g0FeyJMnkMOB9gTvb+mZgv3bePRiM3to6HJ9in+FzrK2qiaqaWLZs2a6mLEnagWkLR3t24/ok+/c9cJJlSZa09Z8GXg7cDFwOvKY1Ww1c3NbXt23a9/9cVdXiJ7RRVwcAK4Gv9M1HkjQ7ujwAuBy4MclXgB9MBqvqVR32W9dGQO0GXFhVn0tyE3B+knczeJDwnNb+HOCvk2xicKVxQjvPjUkuZPDU+sPAKVX1SOefUJI0q7oUjt/fmQNX1Q3AC6aI38YUo6Kq6ofA8Ts41nuA9+xMHpKk2dVlksMvJPk5YGVV/VOSJwE+RyFJi1SXSQ7/K4PnKv6yhfYBPjvKpCRJ81eX4binAIcB3wOoqluBZ4wyKUnS/NWlcDxUVT+a3GhDZR/zHIUkaXHoUji+kOSdwE8neQXwKeDvRpuWJGm+6lI4TgO2AF8D3ghcArxrlElJkuavLqOqftymU7+KwS2qW9qDeZKkRWjGwpHklcBfMJigMMABSd5YVf8w6uQkSfNPlwcA3w+8rKo2ASR5NvD3gIVDkhahLn0c90wWjeY2BtOkS5IWoR1ecSR5dVu9McklwIUM+jiOB66eg9wkSfPQdLeqfn1o/W7g19r6FmDpyDKSJM1rOywcVXXSXCYiSVoYuoyqOgB4M7BiuH2HadUlSY9DXUZVfZbBuzL+DvjxaNOR+rn9zOeNO4XHvf1P/9q4U9A806Vw/LCqPjLyTCRJC0KXwvHhJGcA/wg8NBmsqmtHlpUkad7qUjieB7weOJxtt6qqbUuSFpkuheM3gGcNT60uSVq8ujw5fj2wZNSJSJIWhi5XHHsD30hyNY/u43A4riQtQl0Kxxk7c+Ak+wHnAf+BQd/I2qr6cJK9gAsYPBfybeA3q+reJAE+DBwLPAi8YbIDPslqtr0D5N1VtW5ncpIk7bou7+P4wk4e+2HgbVV1bZKnAtck2QC8Abisqt6b5DQGL4p6O3AMsLJ9DgHOBg5pheYMYIJBp/w1SdZX1b07mZckaRfM2MeR5IEk32ufHyZ5JMn3Ztqvqu6avGKoqgeAm4F9gFXA5BXDOuC4tr4KOK8GvgwsSbIcOArYUFVbW7HYABzd8+eUJM2SLlccTx3eTnIccHCfkyRZAbyAwVsE966qu9qx70ryjNZsH+COod02t9iO4pKkMegyqupRquqz9HiGI8lTgL8F3lpV012pZKrTTRPf/jxrkmxMsnHLli1d05Mk9dRlksNXD23uxra+hhkleQKDovGJqvp0C9+dZHm72ljOtpdCbQb2G9p9X+DOFn/pdvErtj9XVa0F1gJMTEz4TnRJGpEuVxy/PvQ5CniAQX/EtNooqXOAm6vqA0NfrQdWt/XVwMVD8RMzcChwf7uldSlwZJKlSZYCR7aYJGkMuvRx7Ox7OQ5jMFXJ15Jc12LvBN4LXJjkZOB2Bm8UBLiEwVDcTQyG457Uzr81yVlse+vgmVW1dSdzkiTtouleHXv6NPtVVZ013YGr6ktM3T8BcMRUBwRO2cGxzgXOne58kqS5Md0Vxw+miD0ZOBl4GjBt4ZAkPT5N9+rY90+utwf4TmVw++h84P072k+S9Pg2bR9He2r7d4HfYvCw3gt9YluSFrfp+jj+GHg1gyGuz6uq789ZVpKkeWu64bhvA57JYHLBO4emHXmgy5QjkqTHp+n6OHo/VS5JevyzOEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknoZWeFIcm6Se5J8fSi2V5INSW5ty6UtniQfSbIpyQ1JXji0z+rW/tYkq0eVrySpm1FecXwcOHq72GnAZVW1ErisbQMcA6xsnzXA2fCTd56fARwCHAycMVlsJEnjMbLCUVVfBLZuF14FrGvr64DjhuLn1cCXgSVJlgNHARuqamtV3Qts4LHFSJI0h+a6j2PvqroLoC2f0eL7AHcMtdvcYjuKS5LGZL50jmeKWE0Tf+wBkjVJNibZuGXLlllNTpK0zVwXjrvbLSja8p4W3wzsN9RuX+DOaeKPUVVrq2qiqiaWLVs264lLkgbmunCsByZHRq0GLh6Kn9hGVx0K3N9uZV0KHJlkaesUP7LFJEljsseoDpzkk8BLgacn2cxgdNR7gQuTnAzcDhzfml8CHAtsAh4ETgKoqq1JzgKubu3OrKrtO9wlSXNoZIWjql63g6+OmKJtAafs4DjnAufOYmqSpF0wXzrHJUkLhIVDktTLyG5VLRS//HvnjTuFReGaPz5x3ClImiVecUiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknqxcEiSerFwSJJ6sXBIknpZMIUjydFJbkmyKclp485HkharBVE4kuwO/DlwDHAg8LokB443K0lanBZE4QAOBjZV1W1V9SPgfGDVmHOSpEVpoRSOfYA7hrY3t5gkaY7tMe4EOsoUsXpUg2QNsKZtfj/JLSPPanyeDnxn3En0kT9ZPe4U5pOF9fs7Y6q/fovWwvrdAXlLr9/fz3VptFAKx2Zgv6HtfYE7hxtU1Vpg7VwmNS5JNlbVxLjz0M7x97dw+bsbWCi3qq4GViY5IMmewAnA+jHnJEmL0oK44qiqh5P8DnApsDtwblXdOOa0JGlRWhCFA6CqLgEuGXce88SiuCX3OObvb+HydwekqmZuJUlSs1D6OCRJ84SFY4Fx6pWFK8m5Se5J8vVx56J+kuyX5PIkNye5Mcmp485pnLxVtYC0qVf+D/AKBkOUrwZeV1U3jTUxdZLkJcD3gfOq6j+OOx91l2Q5sLyqrk3yVOAa4LjF+nfPK46FxalXFrCq+iKwddx5qL+ququqrm3rDwA3s4hnr7BwLCxOvSKNWZIVwAuAq8abyfhYOBaWGadekTQ6SZ4C/C3w1qr63rjzGRcLx8Iy49QrkkYjyRMYFI1PVNWnx53POFk4FhanXpHGIEmAc4Cbq+oD485n3CwcC0hVPQxMTr1yM3ChU68sHEk+Cfwr8Nwkm5OcPO6c1NlhwOuBw5Nc1z7HjjupcXE4riSpF684JEm9WDgkSb1YOCRJvVg4JEm9WDgkSb1YOCRJvVg4tKgk+ZcObd6a5EkjzuOgmZ4DSPKGJH82y+ed9WNq8bFwaFGpqhd3aPZWoFfhaFPe93EQsGgfINPCZuHQopLk+2350iRXJLkoyTeSfCIDbwGeCVye5PLW9sgk/5rk2iSfahPdkeTbSU5P8iXg+CTPTvL5JNck+d9JfqG1Oz7J15Ncn+SLbbqYM4HXtieQX9sh72VJ/jbJ1e1zWJLdWg5LhtptSrL3VO1n/Q9Ti9Ye405AGqMXAL/EYKLIK4HDquojSX4XeFlVfSfJ04F3AS+vqh8keTvwuwz+4Qf4YVX9KkCSy4A3VdWtSQ4BPgocDpwOHFVV/zfJkqr6UZLTgYmq+p2OuX4Y+GBVfSnJ/sClVfWLSS4GfgP4WDvnt6vq7iR/s3174Bd38c9LAiwcWty+UlWbAZJcB6wAvrRdm0OBA4ErB/PcsSeD+aYmXdD2fwrwYuBTrR3AE9vySuDjSS4EdnZW1ZcDBw4d+2fam+guYFCYPsZg0ssLZmgv7TILhxazh4bWH2Hqvw8BNlTV63ZwjB+05W7AfVV10PYNqupN7WrglcB1SR7TpoPdgBdV1f97VHLJvwLPSbIMOA549wztd+LU0qPZxyE91gPA5P/OvwwcluQ5AEmelOTnt9+hvdTnW0mOb+2S5Plt/dlVdVVVnQ58h8E7VYbP0cU/MpgZmXbMg9p5C/gM8AEGU35/d7r20mywcEiPtRb4hySXV9UW4A3AJ5PcwKCQ/MIO9vst4OQk1wM3su198H+c5GtJvg58EbgeuJzBraROnePAW4CJJDckuQl409B3FwD/hW23qWZqL+0Sp1WXJPXiFYckqRc7x6UxS3IScOp24Sur6pRx5CPNxFtVkqRevFUlSerFwiFJ6sXCIUnqxcIhSerFwiFJ6uX/A0hLkz4SGfAXAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "每类样本分布不是很均匀"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=50):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先使用默认参数观察弱分类器数目的大致范围（采用默认参数配置，看看模型是过拟合还是欠拟合）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[10:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(10,cvresult.shape[0]+10)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "全部数据跑时，观察到n_estimators = 233的时候停止了 cv测试误差为0.5069414\n",
    "只取1万行跑时，观察到n_estimators = 101的时候停止了 cv测试误差为0.4874932"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第二部：调整参数：max_depth 和 min_child_weight"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(粗调，参数的步长为2；下一步在粗调最佳参数周围，将步长降为1，进行精细调整)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一步参数调整得到的n_estimators最优值（233），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.64665, std: 0.00495, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.64576, std: 0.00428, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.64707, std: 0.00432, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.63989, std: 0.00740, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.64066, std: 0.00621, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.64032, std: 0.00562, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.65162, std: 0.01077, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.64798, std: 0.00993, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.64570, std: 0.00455, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.66428, std: 0.01194, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.65507, std: 0.00900, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.64996, std: 0.01097, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.6398871227604337)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=101,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "#使用GridSearchCV来训练参数\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 9.20955367,  9.61708012,  9.60471315, 14.83432717, 15.01384735,\n",
       "        15.64057107, 20.47284784, 20.0755105 , 19.72305293, 25.08052502,\n",
       "        24.01018763, 20.66872435]),\n",
       " 'std_fit_time': array([0.25122096, 0.03903293, 0.03526433, 0.04897715, 0.2804309 ,\n",
       "        0.07044195, 0.18213019, 0.15717346, 0.11312837, 0.03178722,\n",
       "        0.45506824, 0.48683729]),\n",
       " 'mean_score_time': array([0.03211422, 0.03231378, 0.03291221, 0.05365653, 0.05525241,\n",
       "        0.05365653, 0.07878952, 0.07041183, 0.06841702, 0.08537183,\n",
       "        0.07938776, 0.06642246]),\n",
       " 'std_score_time': array([0.00039878, 0.00048846, 0.00063068, 0.00074628, 0.00205352,\n",
       "        0.00132305, 0.00876295, 0.00048873, 0.00149257, 0.00101716,\n",
       "        0.00240982, 0.0037099 ]),\n",
       " 'param_max_depth': masked_array(data=[3, 3, 3, 5, 5, 5, 7, 7, 7, 9, 9, 9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'split0_test_score': array([-0.64583496, -0.64628836, -0.64949867, -0.64586682, -0.6446768 ,\n",
       "        -0.6420712 , -0.65863147, -0.64703528, -0.64596207, -0.6719113 ,\n",
       "        -0.66295429, -0.655376  ]),\n",
       " 'split1_test_score': array([-0.65309044, -0.65135496, -0.65133978, -0.65070431, -0.65029088,\n",
       "        -0.65039125, -0.66930406, -0.66710149, -0.65429151, -0.6838346 ,\n",
       "        -0.66834975, -0.66880282]),\n",
       " 'split2_test_score': array([-0.65018449, -0.64806579, -0.64975291, -0.63388374, -0.63880166,\n",
       "        -0.63639895, -0.64132594, -0.64519154, -0.64171209, -0.65367646,\n",
       "        -0.64689007, -0.64069071]),\n",
       " 'split3_test_score': array([-0.64565406, -0.64464319, -0.64540025, -0.63815527, -0.63707434,\n",
       "        -0.6381898 , -0.64642896, -0.64011712, -0.64227704, -0.65932258,\n",
       "        -0.65130784, -0.63934667]),\n",
       " 'split4_test_score': array([-0.63845935, -0.63843538, -0.63936301, -0.63081795, -0.63243858,\n",
       "        -0.63455509, -0.64237717, -0.64046393, -0.64423912, -0.65264128,\n",
       "        -0.64583697, -0.64557028]),\n",
       " 'mean_test_score': array([-0.6466454 , -0.64575832, -0.64707194, -0.63988712, -0.64065768,\n",
       "        -0.64032201, -0.65161514, -0.64798253, -0.64569654, -0.66427917,\n",
       "        -0.65506949, -0.64995828]),\n",
       " 'std_test_score': array([0.00495341, 0.00428416, 0.00432404, 0.00740317, 0.00620911,\n",
       "        0.00561477, 0.0107723 , 0.0099256 , 0.00455271, 0.01194195,\n",
       "        0.00899796, 0.01097472]),\n",
       " 'rank_test_score': array([ 6,  5,  7,  1,  3,  2, 10,  8,  4, 12, 11,  9]),\n",
       " 'split0_train_score': array([-0.59289863, -0.5958801 , -0.59872058, -0.49334309, -0.5072168 ,\n",
       "        -0.51819768, -0.37103415, -0.40919081, -0.43653054, -0.27139687,\n",
       "        -0.33563447, -0.38066345]),\n",
       " 'split1_train_score': array([-0.59085278, -0.5933045 , -0.59493064, -0.4909754 , -0.50597368,\n",
       "        -0.51513959, -0.36993569, -0.40866894, -0.43663945, -0.26860479,\n",
       "        -0.33245157, -0.37336903]),\n",
       " 'split2_train_score': array([-0.59618179, -0.59753705, -0.60107488, -0.49472992, -0.50957479,\n",
       "        -0.52005047, -0.37585169, -0.41336943, -0.43823057, -0.2723829 ,\n",
       "        -0.33617997, -0.38024297]),\n",
       " 'split3_train_score': array([-0.59521908, -0.59590444, -0.59819362, -0.4960356 , -0.50962792,\n",
       "        -0.51899297, -0.37458104, -0.41339887, -0.43707696, -0.26776743,\n",
       "        -0.3338343 , -0.38097991]),\n",
       " 'split4_train_score': array([-0.59455125, -0.59640078, -0.60013109, -0.49875149, -0.51242907,\n",
       "        -0.52257544, -0.37321678, -0.41123348, -0.43690466, -0.26938347,\n",
       "        -0.33721268, -0.37874059]),\n",
       " 'mean_train_score': array([-0.5939407 , -0.59580537, -0.59861016, -0.4947671 , -0.50896445,\n",
       "        -0.51899123, -0.37292387, -0.41117231, -0.43707644, -0.26990709,\n",
       "        -0.3350626 , -0.37879919]),\n",
       " 'std_train_score': array([0.00187887, 0.0013873 , 0.00210298, 0.00260348, 0.00222779,\n",
       "        0.00242625, 0.00218652, 0.00199909, 0.00060836, 0.00172612,\n",
       "        0.00170438, 0.00282155])}"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.639887 using {'max_depth': 5, 'min_child_weight': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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+fTTSZo8mf0LFrBr9kNsvfVWds2aRcY1V5N61llIdHSkwzQmZA3VHFrDe++9x3vvvceIESMAKCoqYt26dUyYMIGbbrqJmTNncuaZZx70a7wh0dHRTJ7sm41p6NChxMTE4PF4GDp0KJs2bQJ8v+Cvu+46cnNzcbvdfP311/7XP/DAAwwZMoSxY8dy4YUX1vs+H330kT8BDRs2jGHDfINQlyxZwurVqxk/fjwAFRUVHHvssf7X1Rzzwgsv5Oc//3m9x//hD38IwNFHH+2POzs7m3nzDgyUdbvd5ObmUlhYyNSpU1m1ahVDhgxp0nk6FJZIQiAuF8mnnkrSpEkUffgfds2ezbbf/o5ds2eTOW0aKWefjcsSijHNpqrceuutXHPNNQftW758OfPmzePWW2/l1FNP9dcmGuPxePxNPC6Xi5iYGP/jqqoqAO677z66du3KF198gdfrJTY21v/6LVu24HK52L59O16vF5er/oadYE1JqsqkSZN44YUXGn1NQ01RNXG73W5/3PVJTU1l4sSJvPPOO2FJJNa01QJEhKSTTqT3yy/R89FH8HTpyrbb72DDKZPY/fQzeG3OImOaLCkpif379wPwve99j8cff5yioiLA9yW+Y8cO8vPziY+P55JLLuGmm27is88+O+i1odi7dy/du3fH5XLxzDPPUO0MrKmqquKKK67g+eefZ9CgQbWapOo6/vjjee655wBYtWoVK1asAGDs2LEsXLiQ9evXA1BSUlKrxvPSSy/572tqKs35XDt37qSwsBDw9dcsWLCAgQMHHtIxmspqJC1IREicMIGE446jZMkSdj04m+133smuRx4h48c/Ju2C83HFx0c6TGPatIyMDMaPH8+QIUM47bTTuOiii/xfqImJiTz77LOsX7+em2++GZfLhcfjYfbs2QBcffXVnHbaaXTv3r3BfpLGzJgxg7PPPptXXnmFE088kYSEBADuvPNOJkyYwIQJExg+fDjHHHMMZ5xxBoMGDTroGNOnT+eKK65g2LBhDB8+nNGjRwOQlZXFk08+yYUXXkh5eTkAf/jDHxgwYAAA5eXljBkzBq/X66+1XHDBBUybNo2///3vvPpq/Usx5efnc9VVVzFv3jy2bt3KZZddRnV1NV6vl/POO48zzzyz2eekIdIZLrIbNWqURmqFxOKlS9k1ezYli5fgTksj/YorSLvoItyJ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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "得到最佳max_depth为 5, min_child_weight为 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 将步长设为1，精调max_depth 和 min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [4, 5, 6], 'min_child_weight': [1, 2]}"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = [4,5,6]\n",
    "min_child_weight = [1,2]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.64205, std: 0.00664, params: {'max_depth': 4, 'min_child_weight': 1},\n",
       "  mean: -0.64112, std: 0.00594, params: {'max_depth': 4, 'min_child_weight': 2},\n",
       "  mean: -0.63989, std: 0.00740, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.64019, std: 0.00842, params: {'max_depth': 5, 'min_child_weight': 2},\n",
       "  mean: -0.64407, std: 0.00811, params: {'max_depth': 6, 'min_child_weight': 1},\n",
       "  mean: -0.64480, std: 0.00514, params: {'max_depth': 6, 'min_child_weight': 2}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.6398871227604337)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=101,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "精调后得到的结果还是max_depth=5 和 min_child_weight=1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 再次调整弱分类器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 9\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print (cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('2_nestimators.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( '2_nestimators.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     train-mlogloss-mean  train-mlogloss-std  test-mlogloss-mean  \\\n",
      "0               1.961556            0.002246            1.966860   \n",
      "1               1.788378            0.002682            1.797549   \n",
      "2               1.652242            0.002121            1.664594   \n",
      "3               1.540683            0.001714            1.555137   \n",
      "4               1.445910            0.001979            1.463177   \n",
      "5               1.364761            0.001148            1.384880   \n",
      "6               1.293782            0.001660            1.316416   \n",
      "7               1.231422            0.002407            1.255870   \n",
      "8               1.176183            0.001561            1.202559   \n",
      "9               1.127156            0.001474            1.155095   \n",
      "10              1.083041            0.001305            1.112917   \n",
      "11              1.043341            0.001586            1.075343   \n",
      "12              1.007484            0.001290            1.041674   \n",
      "13              0.974608            0.001528            1.011246   \n",
      "14              0.945089            0.001462            0.983564   \n",
      "15              0.917718            0.001754            0.958030   \n",
      "16              0.892997            0.001348            0.935015   \n",
      "17              0.870666            0.001388            0.914493   \n",
      "18              0.849721            0.001006            0.895434   \n",
      "19              0.830459            0.001255            0.878376   \n",
      "20              0.812835            0.001064            0.862692   \n",
      "21              0.796618            0.001324            0.848097   \n",
      "22              0.781388            0.001351            0.834512   \n",
      "23              0.767476            0.001594            0.821948   \n",
      "24              0.754530            0.001831            0.810041   \n",
      "25              0.742861            0.001791            0.799722   \n",
      "26              0.731340            0.002134            0.789659   \n",
      "27              0.720921            0.002051            0.780993   \n",
      "28              0.711006            0.001586            0.772530   \n",
      "29              0.701592            0.001539            0.764830   \n",
      "..                   ...                 ...                 ...   \n",
      "71              0.532372            0.001778            0.654247   \n",
      "72              0.530444            0.001864            0.653589   \n",
      "73              0.528782            0.001794            0.653080   \n",
      "74              0.526954            0.002171            0.652312   \n",
      "75              0.525091            0.002389            0.651834   \n",
      "76              0.523355            0.002139            0.651529   \n",
      "77              0.521606            0.001902            0.650763   \n",
      "78              0.519735            0.001955            0.650292   \n",
      "79              0.518149            0.001951            0.650119   \n",
      "80              0.516457            0.001973            0.649572   \n",
      "81              0.514622            0.002111            0.649010   \n",
      "82              0.513067            0.002060            0.648710   \n",
      "83              0.511440            0.002092            0.648287   \n",
      "84              0.509945            0.001947            0.647732   \n",
      "85              0.508574            0.001951            0.647317   \n",
      "86              0.507059            0.001908            0.647003   \n",
      "87              0.505489            0.001805            0.646809   \n",
      "88              0.504136            0.001754            0.646688   \n",
      "89              0.502523            0.001724            0.646262   \n",
      "90              0.501118            0.001649            0.646105   \n",
      "91              0.499866            0.001564            0.645691   \n",
      "92              0.498525            0.001483            0.645467   \n",
      "93              0.497026            0.001755            0.645255   \n",
      "94              0.495559            0.001655            0.644952   \n",
      "95              0.494251            0.001686            0.644691   \n",
      "96              0.492668            0.001715            0.644548   \n",
      "97              0.491453            0.001750            0.644358   \n",
      "98              0.490037            0.001795            0.644176   \n",
      "99              0.488758            0.001721            0.644120   \n",
      "100             0.487493            0.001777            0.643846   \n",
      "\n",
      "     test-mlogloss-std  \n",
      "0             0.001300  \n",
      "1             0.000897  \n",
      "2             0.001827  \n",
      "3             0.002999  \n",
      "4             0.002731  \n",
      "5             0.003448  \n",
      "6             0.003547  \n",
      "7             0.003538  \n",
      "8             0.004084  \n",
      "9             0.004148  \n",
      "10            0.004211  \n",
      "11            0.003891  \n",
      "12            0.004111  \n",
      "13            0.003894  \n",
      "14            0.003820  \n",
      "15            0.003619  \n",
      "16            0.003213  \n",
      "17            0.002873  \n",
      "18            0.002912  \n",
      "19            0.003133  \n",
      "20            0.003357  \n",
      "21            0.003026  \n",
      "22            0.002829  \n",
      "23            0.002797  \n",
      "24            0.002797  \n",
      "25            0.002921  \n",
      "26            0.003050  \n",
      "27            0.002681  \n",
      "28            0.002601  \n",
      "29            0.002547  \n",
      "..                 ...  \n",
      "71            0.004549  \n",
      "72            0.004592  \n",
      "73            0.004486  \n",
      "74            0.004401  \n",
      "75            0.004585  \n",
      "76            0.004694  \n",
      "77            0.004819  \n",
      "78            0.004670  \n",
      "79            0.004870  \n",
      "80            0.005045  \n",
      "81            0.005420  \n",
      "82            0.005153  \n",
      "83            0.004909  \n",
      "84            0.004990  \n",
      "85            0.005240  \n",
      "86            0.005279  \n",
      "87            0.005332  \n",
      "88            0.005305  \n",
      "89            0.005192  \n",
      "90            0.005278  \n",
      "91            0.005181  \n",
      "92            0.005367  \n",
      "93            0.005379  \n",
      "94            0.005109  \n",
      "95            0.004808  \n",
      "96            0.004545  \n",
      "97            0.004498  \n",
      "98            0.004320  \n",
      "99            0.004473  \n",
      "100           0.004582  \n",
      "\n",
      "[101 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.5126257677124814\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators(6,4)\n",
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=101,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb2_3, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "n_estimators还是101个，其实不用再次寻找了，因为第一次十分巧合我设置的就是max_depth=5 和 min_child_weight=1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第三步：调整参数subsample 和 colsample_bytree"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(粗调，参数的步长为0.1；下一步是在粗调最佳参数周围，将步长降为0.05，进行精细调整)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8],\n",
       " 'colsample_bytree': [0.6, 0.7, 0.8, 0.9]}"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.64176, std: 0.00398, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.63799, std: 0.00456, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.63500, std: 0.00412, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.63608, std: 0.00504, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.63556, std: 0.00776, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.63362, std: 0.00485, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.64110, std: 0.00630, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.63981, std: 0.00706, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.63633, std: 0.00640, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.63526, std: 0.00701, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.63338, std: 0.00755, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.63521, std: 0.00727, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.63989, std: 0.00740, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.63728, std: 0.00819, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.63509, std: 0.00490, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.63526, std: 0.00679, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.63328, std: 0.00601, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.63330, std: 0.00797, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.63908, std: 0.00776, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.63790, std: 0.00478, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.63383, std: 0.00809, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.63604, std: 0.00786, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.63466, std: 0.00690, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.63560, std: 0.00737, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       " -0.6332794558252208)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=101,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.633279 using {'colsample_bytree': 0.8, 'subsample': 0.7}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEKCAYAAAA4t9PUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3XdUlMcawOHf0EUFlCaCvSNVsceCxhZ7TTT2rjG2q9FojDXGFnuMMYkl9pZYE0vsJXYRFWzYABERFAWlz/1jkaAUQdgFdZ5z9lz5mG9mdsPlZb6ZeUdIKVEURVGUt6WX0x1QFEVR3m0qkCiKoihZogKJoiiKkiUqkCiKoihZogKJoiiKkiUqkCiKoihZogKJoiiKkiUqkCiKoihZogKJoiiKkiUGOd0BXbCyspLFixfP6W4oiqK8U86dO/dISmn9pnJaDSRCiCbAfEAf+FVKOT2VMh2BiYAELkopOyf7nhngC/wppRwshDAFNgGlgHhgh5RyzJv6Ubx4cc6ePZsN70hRFOXDIYS4m5FyWgskQgh94EegIRAAnBFCbJdS+iQrUwb4GqglpXwshLB5rZopwOHXrs2WUh4UQhgB+4UQTaWUf2vrfSiKoijp0+YcSVXgppTylpQyBlgPtHqtTF/gRynlYwAp5cOX3xBCVAZsgb0vr0kpn0spDyb+OwY4Dzho8T0oiqIob6DNQGIP+Cf7OiDxWnJlgbJCiONCiJOJj8IQQugBPwCj0qpcCGEBtAD2Z2uvFUVRlEzR5hyJSOXa6znrDYAyQD00I4ujQggnoAvwl5TSX4iU1QghDIB1wAIp5a1UGxeiH9APoGjRom/5FhQl+8TGxhIQEEBUVFROd0VRXmFiYoKDgwOGhoZvdb82A0kAUCTZ1w7A/VTKnJRSxgK3hRDX0ASWGkBtIcQgIB9gJISISDaxvhS4IaWcl1bjUsqlieXw8PBQh64oOS4gIID8+fNTvHhxUvsDSVFygpSS0NBQAgICKFGixFvVoc1HW2eAMkKIEokT458B218rsxXwBBBCWKF51HVLSvm5lLKolLI4MBL4/WUQEUJMBcyBYVrsu6Jku6ioKCwtLVUQUXIVIQSWlpZZGilrLZBIKeOAwcAeNEt4N0oprwghJgshWiYW2wOECiF8gIPAKCllaFp1CiEcgHGAI3BeCOElhOijrfegKNlNBRElN8rqz6VW95FIKf8C/nrt2rfJ/i2BEYmvtOpYAaxI/HcAqc+9ZDspJZvOBlAgrxENHW110aSiKMo76YPY2f424hIkv5+8w/0nUbgWqY1NfpOc7pKiKEqupHJtpcFQX4+5Hd2IjI7j6y2X0AyeFOXd9eTJExYvXvxW986bN4/nz59nW19WrFjB4MGDs62+jDp06BDNmzfP9H2Z7e+dO3dYu3ZtptvJqLCwMBo2bEiZMmVo2LAhjx8/TrXcvXv3aNSoERUqVMDR0ZE7d+5opT8qkKSjjG1+Rjcpz/6rD1l/xv/NNyhKLpabAsn7Lr1AEhcXl+X6p0+fToMGDbhx4wYNGjRg+vQU2acA6NatG6NGjcLX15fTp09jY/N68pDsoR5tvUGPmsXZfzWYKTt9qFnKkmKWeXO6S8p7YNKOK/jcf5qtdToWNmNCi4ppfn/MmDH4+fnh5uZGw4YNsbGxYePGjURHR9OmTRsmTZpEZGQkHTt2JCAggPj4eMaPH09wcDD379/H09MTKysrDh48mGr9u3fvZuzYscTHx2NlZcX+/fsJCwujV69e3Lp1C1NTU5YuXYqLi8sr923atIlJkyahr6+Pubk5R44c4c6dO3Tt2pXIyEgAFi1aRM2aNTl06BATJkzA1tYWLy8v2rZti7OzM/Pnz+fFixds3bqVUqVK0aNHD0xMTLhy5QrBwcHMmTMnxUgkMjKSL7/8kkuXLhEXF8fEiRNp1er15Bv/8ff3p0mTJty+fZvOnTszYcIExo8fj5WVFUOHDgVg3Lhx2NrasnbtWnx9fXFzc6N79+4UKFCAXbt2ERUVRWRkJAcOHGDWrFkpPn+A1atXs2DBAmJiYqhWrRqLFy9GX1//lb5s27aNQ4cOAdC9e3fq1avHjBkzXinj4+NDXFwcDRs2BCBfvnxpvresUoHkDfT0BLPau9J43hFGbLzIxv410NdTK2+Ud8/06dO5fPkyXl5e7N27l82bN3P69GmklLRs2ZIjR44QEhJC4cKF2bVrFwDh4eGYm5szZ84cDh48iJWVVap1h4SE0LdvX44cOUKJEiUICwsDYMKECbi7u7N161YOHDhAt27d8PLyeuXeyZMns2fPHuzt7Xny5AkANjY27Nu3DxMTE27cuEGnTp2SEq9evHgRX19fChYsSMmSJenTpw+nT59m/vz5LFy4kHnzNNvL7ty5w+HDh/Hz88PT05ObN2++0u53331H/fr1WbZsGU+ePKFq1ap8/PHH5M2b+h+Lp0+f5vLly5iamlKlShWaNWtG7969adu2LUOHDiUhIYH169dz+vRpXFxcmD17Njt37gQ0j8b+/fdfvL29KViwIHv37uXGjRspPn9ra2s2bNjA8ePHMTQ0ZNCgQaxZs4Zu3brRp08fBgwYgIeHB8HBwdjZ2QFgZ2fHw4cPU/T3+vXrWFhY0LZtW27fvs3HH3/M9OnTUwSl7KACSQYUtsjD1NZODF3vxZLDfnzhWTqnu6S849IbOejC3r172bt3L+7u7gBERERw48YNateuzciRIxk9ejTNmzendu3aGarv5MmT1KlTJ2lDW8GCBQE4duwYW7ZsAaB+/fqEhoYSHh7+yr21atWiR48edOzYkbZt2wKaLACDBw/Gy8sLfX19rl+/nlS+SpUqSb9ES5UqRaNGjQBwdnZ+ZbTUsWNH9PT0KFOmDCVLluTq1aspPoPt27cze/ZsQLPP5969e1SoUCHV99iwYUMsLS0BaNu2LceOHWPYsGFYWlpy4cIFgoODcXd3TyqT2v0vP5e0Pn9vb2/OnTtHlSpVAHjx4kXS46hff/011XrTEhcXx9GjR7lw4QJFixbl008/ZcWKFfTu3TtT9WSECiQZ1NK1MHt9gpn3z3XqlrXGyd48p7ukKG9NSsnXX39N//79U3zv3Llz/PXXX3z99dc0atSIb7/9NpUaUtaX2l6E1BapvF5uyZIlnDp1il27duHm5oaXlxcLFy7E1taWixcvkpCQgInJf6smjY2Nk/6tp6eX9LWent4r8w+vt/P611JKtmzZQrly5d74/tKrr0+fPqxYsYIHDx7Qq1evNO9PPtJJ6/NfuHAh3bt35/vvv0+3L7a2tgQFBWFnZ0dQUFCqcx8ODg64u7tTsmRJAFq3bs3Jkye1EkjUZHsGCSH4rrUTBUyNGL7Bi6jY+JzukqJkSv78+Xn27BkAjRs3ZtmyZURERAAQGBjIw4cPuX//PqampnTp0oWRI0dy/vz5FPempkaNGhw+fJjbt28DJD3aqlOnDmvWrAE0K6asrKwwMzN75V4/Pz+qVavG5MmTsbKywt/fn/DwcOzs7NDT02PVqlXEx2f+/2+bNm0iISEBPz8/bt26lSJgNG7cmIULFyYFuwsXLqRb3759+wgLC0uai6lVqxYAbdq0Yffu3Zw5c4bGjRsDb/680vr8GzRowObNm5MeVYWFhXH3bsojQVq2bMnKlSsBWLlyZapzO1WqVOHx48eEhIQAcODAARwdHdN9j29LjUgywcLUiFkdXOm+7DSz91zjm+ba+Y+iKNpgaWlJrVq1cHJyomnTpnTu3JkaNWoAmonY1atXc/PmTUaNGoWenh6Ghob89NNPAPTr14+mTZtiZ2eX6mS7tbU1S5cupW3btiQkJCTNcUycOJGePXvi4uKCqalp0i+/5EaNGsWNGzeQUtKgQQNcXV0ZNGgQ7dq1Y9OmTXh6eqY5b5GecuXKUbduXYKDg1myZMkroxqA8ePHM2zYMFxcXJBSUrx48aQ5jdR89NFHdO3alZs3b9K5c2c8PDwAMDIywtPTEwsLi6T5BxcXFwwMDHB1daVHjx4UKFDglboaNWqEr69vis/f0dGRqVOn0qhRIxISEjA0NOTHH3+kWLFir8yRjBkzho4dO/Lbb79RtGhRNm3aBMDZs2dZsmQJv/76K/r6+syePZsGDRogpaRy5cr07ds3059jRogPYX+Eh4eHzM4TEsdvvcyqk3dZ27caNUulPvmoKK/z9fVN8/m7kr169OhB8+bNad++vdbbSkhIoFKlSmzatIkyZcpovT1tSe3nUwhxTkrp8aZ71aOtt/D1J+UpaZWXkRsv8jQqNqe7oyhKDvHx8aF06dI0aNDgnQ4iWaUebb0FUyMD5nzqRrufTjBx2xXmfOqW011SFJ2pVq0a0dHRr1xbtWoVzs7OOdSjlFasWPFW9+3Zs4fRo0e/cq1EiRL8+eefqZZ3dHTk1q1Uj0T6oKhA8pbcilgw2LM08/ff4GNHWz5xtsvpLimKTpw6dSqnu6A1jRs3TpowVzJOPdrKgsH1S+PiYM7YPy/x8Kk69U5RlA+TCiTpeR4G6SxGMNTXY+6nbkTFxvPVFm+V2FFRlA+SCiRpkRJWt4NfG8D1PWkGlFLW+fi6aQUOXQthzal7Ou6koihKzlOBJC0yASp3h8gQWNsRltaFq7tSDShdqxejdhkrvtvly+1HkTnQWUVRlJyjAkla9PShcg/48jy0XARR4bC+MyypDT7bISHhv6KJiR2NDPQYvsGLuPiEtOtVlBySm9LIq/NIsiYj55EcPHgQNze3pJeJiQlbt27VSn9UIHkTfUOo1BUGn4PWP0FsJGzsCks+git/JgWUQuYmTG3thJf/E3465JfDnVaUlHJTIHnf5YbzSDw9PfHy8sLLy4sDBw5gamqalOAyu6nlvxmlbwBuncG5I1zeAkdmwaYeYF0e6oyCim1o4VqYfT7BzN9/g3rlbHB2UIkdlTT8PQYeXMreOgs5Q9PUDzgCdR7Jh3YeSXKbN2+madOmmJqaplkmK1QgySx9A3D9FJzba0YkR2bBlt5weAbUGcWUFi04fTuMYRsusGtIbUwMsz/3v6K8DXUeyYd1Hkly69evZ8SIEemWyQoVSN6Wnr4mmFRsC77b4PBM+KMv5gVL8XvlATQ9WIgZu6/m+LkTSi6VzshBF9R5JO//eSQvBQUFcenSJa1utFSBJKv09KBiG6jQCq7uhMMzKfvvKM6Y2/P9yWYcLzuCWuXUrncld1Hnkbz/55G8tHHjRtq0aYOhoWG6dWaFmmzPLnp64NgSBhyFz9ZiUcCKWYZLKbGuDs///Q3iYnK6h8oHTp1H8mGdR/LSunXr6NSpU7rvLavUiCS7CQHlm6FX7hNu//sHz3ZPpfCeEXByLnw0HNy7gIHxm+tRlGymziP5sM4jAc08kb+/P3Xr1s3055cZ6jwSLVvwz3XOH9jEXNvdFHjsDWb2iQGlKxiavLkC5b2hziPRHXUeSeap80hysUGepXliX496j78hrO1GMC8Cf42EBW5wcgnEvsjpLiqK8pbUeSQaakSiA7dCImi24BgexQvwe88qiDtHNcuF7x6HfLZQayhU7glG2lnjreQO78uI5F04j+RtZfY8kvdJVkYkKpDoyKqTdxm/9TKTW1WkW43imot3jsGh6XDnKOS1hppDoEpvMMr882Al93tfAonyflKPtt4BXaoVpW5Za6b95YtfiGalBsU/gh47oeffYFsR9o2Hec5wbC5Ep73iQ1EUJTdRgURHhBDMau+CiaE+IzZ4EZs8sWOxmtBtG/TaC4Xd4Z+JmoByZDZEPc2xPiuKomSECiQ6ZGNmwrQ2zlwMCOfHgzdTFihaDbpsgT77waEqHJgC85zg0Ax48UT3HVYURckAFUh07BNnO9q427PwwE28/NMIDg4e8PlG6HcIitWCQ9NgngscnAYvUqaLVpSMyE3Zf1Ua+azJSBp5gK+++oqKFStSoUIFhgwZorVTXFUgyQETW1bENr8xIzZ48SImnR27hd2h0zrofwRK1Nas9JrrDPunaI4BVpRMyE2B5H2XG9LInzhxguPHj+Pt7c3ly5c5c+YMhw8fznLbqVGBJAeY5zFkdgdXbj2KZPrfvm++wc4VPlsDA45D6fpwdLZmDuWfiRD5SOv9Vd4PydPIjxo1ilmzZlGlShVcXFyYMGECoEmt3qxZM1xdXXFycmLDhg0sWLAgKY28p6dnmvXv3r2bSpUq4erqSoMGDQDNX86tW7fGxcWF6tWr4+3tneK+TZs24eTkhKurK3Xq1AE0v4hr165NpUqVqFSpEidOnAA0I4q6devSsWNHypYty5gxY1izZg1Vq1bF2dkZPz/NWUA9evRgwIAB1K5dm7Jly6a6Yz0yMpJevXpRpUoV3N3d2bZtW7qf38s08uXKlUtK+T5+/Hjmz5+fVGbcuHEsWLCAMWPGcPToUdzc3Jg7dy4rVqygQ4cOtGjRIinJZGqfP2jSyFetWhU3Nzf69++fanqYbdu20b17d0CTRj61A6uEEERFRRETE0N0dDSxsbHY2tqm+x7flkqRkkNqlraiV60SLDt+mwYVbKlT1vrNNxVygo6/Q7CPJpgcmwenlmqWDNccAvkyUIeSK8w4PYOrYVffXDATyhcsz+iqo9P8vkoj/2Glka9Rowaenp7Y2dkhpWTw4MFaW36uRiQ56Ksm5Shjk49Rmy/y5HkmkjraOkL7ZfDFKSjfDP5dpBmh7BkHz4K112HlvZE8jXmlSpW4evUqN27cwNnZmX/++YfRo0dz9OhRzM0zdjhbemnku3btCrw5jfwvv/yS9Nd3bGwsffv2xdnZmQ4dOuDj45NU/mUaeWNj4xRp5O/cuZNULiNp5KdPn46bmxv16tVLSiOflpdp5PPkyZOURr548eJJaeRffp6ZTSOf/PPfv39/Uhp5Nzc39u/fz61btwBNGvmX+b0y4ubNm/j6+hIQEEBgYCAHDhzgyJEjGb4/M9SIJAeZGOoz91M3Wv94nG+2XmZR50qZq8C6HLT7Bep+BUd/gJM/wZlfNWfN1xoGZip9fW6V3shBF1Qa+fc/jfyff/5J9erVyZcvHwBNmzZNCvjZTasjEiFEEyHENSHETSHEmDTKdBRC+Aghrggh1r72PTMhRKAQYlGya5WFEJcS61wgUvvpfYc42ZszvGFZdnoHsc0r8O0qsSoDbZbA4DPg1B5O/wLzXWHXSAh/yzqV945KI/9hpZEvWrQohw8fJi4ujtjYWA4fPqy1R1taG5EIIfSBH4GGQABwRgixXUrpk6xMGeBroJaU8rEQ4vWwOgV4fZnBT0A/4CTwF9AE+Fs770I3+tcpyX7fYMZvvUzVEgWxM8/zdhVZloLWP0KdkXBsDpxbDudXalLXfzQCLIpkb8eVd4pKI/9hpZFv3749Bw4cwNnZGSEETZo0oUWLFpn+HDNCa7m2hBA1gIlSysaJX38NIKX8PlmZmcB1KWWKMySFEJWBUcBuwENKOVgIYQcclFKWTyzTCagnpUw5Pk8mN+TaepM7jyL5ZMFR3ItasKpXNfT0smGg9eQeHJ0DF1ZrvnbrDLX/BwWKZb1uJdNUri3dUWnkMy+35tqyB/yTfR2QeC25skBZIcRxIcRJIUQTACGEHvADmkDyep0Bb6iTxDr6CSHOCiHOhoSEZOFt6EZxq7x808yR4zdDWfnvneyp1KIotJgHQ72gcne4uA4WVoJtX0DYrexpQ1E+YCqNvIY2J9tT+5P69eGPAVAGqAc4AEeFEE5AF+AvKaX/a1MgGalTc1HKpcBS0IxIMtXzRHEJcegL/VQnEbWhU9Ui/OMbzPS/r1K7jBWlbfJnT8XmDtDsB81o5Ph8OLcCvNaBy6eax2CWpbKnHeWD8C6kkV+xYsVb3ZfZNPKOjo5Jq6o+ZNoMJAFA8ofyDsD9VMqclFLGAreFENfQBJYaQG0hxCAgH2AkhIgA5ifWk16d2SI2IZZRh0dRzKwYwyoN00kwEUIwvZ0zjeceYfiGi/wxqCaG+tk4aDQrDE1naE5oPL4Azi4D7/Xg3AFqjwTrstnXlvLeOnXqVE53QWsaN26cNGGuZJw2H22dAcoIIUoIIYyAz4Dtr5XZCngCCCGs0DzquiWl/FxKWVRKWRwYCfwupRwjpQwCngkhqieu1uoGpL8d9S3pC32s8lix7PIy5p6fq7UcNa+zyW/C922duRQYzsL9N7TTSP5C0GQaDPOGGl+A7w74sSps7g0Ps3eTnKIo7z+tBRIpZRwwGNgD+AIbpZRXhBCThRAtE4vtAUKFED7AQWCUlDL0DVUPBH4FbgJ+aGnFlp7QY1y1cXxa7lOWX16u02DSxMmOdpUcWHTwJufvaTFJYz4baDQVhnprTmm89jcsrq4ZrSiKomSQOiHxDaSUfHfqOzZc20DPij0ZXnm4Th5zPY2Kpem8oxjqC/4aWhtTIx3sHY0MhR1D4Npf0G27JlGkkm3Uqi0lN8utq7beC0KI/0YmV5Yz95xuRiZmJob80NGVu2HP+W5XBhI7Zoe8lpqNjQVLwpbeEJEyf4+iKMrrVCDJgNeDyZxzc3QSTKqXtKTPRyVYc+oeB6/p6Je6cX7osBKiwuGPvpCQ+R3FSu6Um9LIq/NIsiaj55GMHj0aJyenpEzO2qICSQa9DCaflfuMFVdW6CyY/K9ROcrZ5uerzd48jsxEYsesKOQETWfCrUOaHF7KeyE3BZL3XW44j2TXrl2cP38eLy8vTp06xaxZs3j6VDtHd6tAkglCCMZWG0un8p1YcWUFP5z9QevB5GVixyfPYxi39ZLOJvyp1A2cO8Kh7+G2djKGKrqlziN51ft+HomPjw9169bFwMCAvHnz4urqyu7du9N9j29LZf/NJCEEX1f9GoCVPiuRSEZ6jNTqBLxjYTNGNCzHjN1X2eoVSBt3hzfflFVCQPO5cP8CbOkDA45pVnkp2eLBtGlE+2bvUmvjCuUpNHZsmt9X55F8WOeRuLq6MmnSJEaMGMHz5885ePAgjo6Oaf58ZIUKJG/hZTARCH73+R1A68GkX52SHLgazLdbr1C1hCX2Fm+Z2DEzjPNBx5XwS31NMOn6J+jpa79dReuSn4cBEBERwY0bN6hduzYjR45k9OjRNG/enNq1M7ZyL73zSLZs2QK8+TySjh070rZtW0BzHsngwYPx8vJCX1+f69evJ5V/eR4JkOI8kuQJJTNyHsn27duZPXs2QNJ5JGmtrHt5HgmQdB7JsGHDks4jCQ4OfqvzSOC/z9/b2zvpPBKAFy9eJKWI//XXFCkJ09WoUSPOnDlDzZo1sba2pkaNGhgYaOdXvgokb0kIwZiqmsz4v/v8jkQyymOU1oKJvp7ghw5uNJ1/hJEbL7KmTzYldnwT24rwySzY/iUcmQ31cvYcjfdFeiMHXVDnkbz/55GA5lHbuHHjAOjcubPW8oGpOZIseBlMPq/wOat8VjHr7CytzmEUtTTl2xaO/HsrlGXHb2utnRTcu2rych36Hm69ntVfeVeo80g+rPNI4uPjCQ3V7O/29vbG29s7afSW3dSIJIuEEIyuovkrfZXPKqSUfFXlK62NTDp6FGGfz0Nm7rlGnbLWlLXNpsSO6RECms15db4kv63221WylTqP5MM6jyQ2Njbp0aSZmRmrV6/W2qMttbM9m0gpmXlmJqt9V9OlQhetBpNHEdE0nnsEWzMTtn5RCyMDHQ0sg3008yVFqkDXrWq+JJPUznbdUeeRZJ7a2Z4LCCH4qspXdKnQhdW+q5l5ZqbWHnNZ5TPm+7bO+AQ9Zf7+62++IbvYOmrmS24fgSOzdNeuouRS6jwSDfVoKxu9DCYAq301pxJqa2TSqGIhOno48NMhP+qXt6FysYLZ3kaq3LvAnWNwaDoUrQEl6+qmXSXXUOeR/EedR6KhHm1pgZSSWWdnscpnlVYfc0VEx9F0/hEEgr+H1iavsY7+LoiJhKWe8OKxmi/JBPVoS8nN1KOtXEYIwSiPUXR17Mpq39XMODNDK4+58hkb8EMHN/wfP2fqLp9srz9NRnmhwwqIfqZJ7qjycWXYh/CHm/LuyerPpQok6YgNCkK+xbJD+C+YdHPsxhrfNUw/PV0rv0SqlihI/zqlWHfan/2+wdlef5psHaHZbLhzFA7P1F277zATExNCQ0NVMFFyFSkloaGhKVa1ZYaaI0mDlBL//gNIiIqiYPduWLRpg56paabqEEIw0mMkQNIO+DFVx2T7Y67hDctw6NpDRm+5xJ5hFljmM37zTdnB7XPNfMnhGVCsBpSsp5t231EODg4EBAQQEhKS011RlFeYmJjg4PD2qZfUHEkaZEICz/b9Q9iyZby4eBF9c3MsOn1Gwc8/x8DaOnN1SckPZ39gpc9KOpXvpEmvks3B5OqDp7RceBzP8tYs6VJZJ4dvAcnmS8IS50sK6aZdRVG0Ts2RZJHQ08OscSOKb1hPsbVrMa1ahdCfl3KzfgPuf/MN0a8lgEu3LiH4n8f/6FGxB+uuruP7099n++ON8oXMGNm4LHuuBLPlfGC21p0uo7yafFzREZrNimq+RFE+OCqQZIBpJXccFi6k1N9/Yd6+HU937uJW8xbc69+fyJMnMxQUhBCMqDwiKZhMOzUt24NJ749KUrVEQSZuv4J/mA7PjrCpAM1+SJwvmaG7dhVFyRVUIMkEo+LFsZswgdIHD2A15EuiLl/hXo+e3G7XjvAdO5Gxsene/zKY9KzYk/XX1md7MNEkdnQF4H+bLhKfoMPHlu6fg2tnzcS7X8oUGoqivL9UIHkLBgUKYD1oEKUP7KfQlMnIqGjujxrFzUaNCV22nPjERGypEUIwvPLwpGDy3anvsjWYFCloyoQWjpy+HcZvx3S8UarZbLAupzmi99kD3batKEqOUYEkC/SMjSnQoQMld+7AYclPGBUpwsOZM7lZz5PgGTOJDQpK9b6kYOLUkw3XNmR7MGlf2YHGFW2Zvec6Vx9o52jNVBnl1Zz3HhMJm3tDfNaPFFUUJfdTgSQbCD098terR7HfV1J882by1a1L2O+/c7NhIwJHjuLFlSsp7xGC4ZVeDSYJMiF7+iME09o4Y5bHkGHrvYiO0+EEuE15zXzJ3WNqvkRRPhAqkGSzPE4Vsf9hNqX37qFgly5EHDjAnXbtudujJxFsqoNvAAAgAElEQVRHjrwy8ngZTHo59WLDtQ1MOzUt24KJZT5jZrRz5uqDZ8zddyNb6swwt86aPSZHZoHfAd22rSiKzqlAoiWG9vbYjhlN6UMHsRk1kpjbt/Hv159bLVrwZMsWEmJiAE0wGVZpGL2demtGJiezb2TSoIItnaoW4ecjfpy+HZYtdWbYJ7PBujxs6QtPU3/EpyjK+0EFEi3TNzPDsndvSu/bS+GZMxAGhgSN+4ab9RvwaMkS4h4/RgjB0EpD6e3Um43XN2ZrMPmmmSNFCpgyYqMXz6LSX1WWrYxMNfm4Yp9r9peo+RJFeW+pQKIjwsgI85YtKfHnHxRdvgyTChUImTefm/Ub8GDyFGL9/RlaaSh9nPuw8fpGpp6cmi3BJK+xAXM/deX+kxdM2anDxI6QOF8yJ3G+ZLpu21YURWdUri0dE0KQt0YN8taoQdT164StWMnjTZt4vG4d+Rs2pG+PHuAMv176FYBvqn+DnshavK9crCAD65Xix4N+fFzBlkYVdZjGxK2TJh/Xkdma80tKN9Bd24qi6ITKtZULxD58yOM1a3m8fj0J4eHkcXfnZF0bphn/Q7vyHRhffXyWg0lMXAJtFh/nQXgUe4bXwUpXiR0BYp5rjuiNDNHk4zKz013biqK8NZVr6x1iaGODzfBhlDmwH9tx44gLCcF13h6Wr8jL03UbmXZ4QpYfcxkZ6DH3UzeeRccxZssl3aYyNzLV5OOKfa45v0TNlyjKe0UFklxEL29eCnbtQqk9u7GfN4+CtsXpszeBhsM388eoDsSEPMxS/WVt8/NV43L84xvMprMB2dTrDLIuB83nwt3jcOh73batKIpWqUCSCwl9fcyaNKb4hvUUXbOaqIolqLDTh+uentwfl7nMw6/rVasENUpaMmnHFe6F6jCxI4DrZ+DeFY7+ADf/0W3biqJozRsDiRCilBDCOPHf9YQQQ4QQFtrvmiKEIG/lytRZtYt/53TmH2dJ6Pat3GreAv/+A4g8dTrTj6j09ASzO7qiJwT/2+Sl28SOAE1narIF/9EPnt7XbduKomhFRkYkW4B4IURp4DegBLBWq71SXiGEoHfTbzD4ahD9B8Gl1k68uHSJe927c6dde8J37npj5uHk7C3yMKlVRc7ceczSIzpO7GhkqsnHFRul8nEpynsiI4EkQUoZB7QB5kkphwNq2Y2OCSH4wu0LOlcfwJQKV1k/rR62kyaSEBXF/ZEjNZmHl69IN/Nwcm3c7fnEuRBz9l3D574OEzsCWJfVzJfcOwGHpum2bUVRsl1GAkmsEKIT0B3YmXjNUHtdUtLyMpgMcB3AprvbmV/Eh+I7tuHw02KMHBx4OGOGJvPwzFlpZh5OXtd3rZ2xMDVi+AYvomJ1fLKh66dQqZtmvuSGmi9RlHdZRgJJT6AG8J2U8rYQogSwWrvdUtIihGCQ6yAGuA7gjxt/MOnkZPLWq0uxVb9TfNMm8tWpQ9jKlZrMw199RZSvb5p1FchrxMz2LlwLfsacfdd1+C4SNZ0JNhXhz34QrsPjgRVFyVZvDCRSSh8p5RAp5TohRAEgv5QyQ/kuhBBNhBDXhBA3hRBj0ijTUQjhI4S4IoRYm3itmBDinBDCK/H6gGTlOwkhLgkhvIUQu4UQVhl8r++NlyOTga4D+fPmn0w8MZEEmUAeZyfs5/ygyTz8+edE/LOf223acrdnTyKOHk11Yt6znA2fVyvKL0dvcfJWqG7fiGGexHxcUWp/iaK8w964s10IcQhoiSadihcQAhyWUo54w336wHWgIRAAnAE6SSl9kpUpA2wE6kspHwshbKSUD4UQRol9ixZC5AMuAzWBh8B9wFFK+UgIMRN4LqWcmF5fcvvO9qxY7LWYny7+ROvSrZlUc9IrO+Djnz7lycaNhK1aTVxwMMZlSlOwR0/MWjRHz8goqdzzmDg+mX+U2HjJ38NqY2ai4yeX3hs1pyp+NAI+nqDbthVFSVN27mw3l1I+BdoCy6WUlYGPM3BfVeCmlPKWlDIGWA+0eq1MX+BHKeVjACnlw8T/jZFSRieWMU7WT5H4yiuEEIAZmsDywRrkNoiBrgPZenMrE068ugNe38wMyz59NJmHZ0wHfQOCxo3jZoMGPFryM/FPngBgamTAnE/dCAp/waTtOk7sCODSESp1h2Nz4MY+3bevKEqWZCSQGAgh7ICO/DfZnhH2gH+yrwMSryVXFigrhDguhDgphGjy8htCiCJCCO/EOmZIKe9LKWOBgcAlEkcmaJYkf9AGuQ1ikOsgtt7cyrfHvyU+4dWJc2FkhHmrVprMw8t+w6RceULmzeOGZ30eTJlKjL8/lYoWYLBnabacD2Cndw7E5qYzNPMlf6j5EkV512QkkEwG9gB+UsozQoiSQEaO3BOpXHv9OZoBUAaoB3QCfn252VFK6S+ldAFKA92FELZCCEM0gcQdKAx4A1+n2rgQ/YQQZ4UQZ0NCQjLQ3XfbQLeBDHIdxDa/bUw4MSFFMIHEDY41a1L0118osW0bZk2a8HjjRvwaNyFg6DD6Wj3HvagFIzdd5MK9x7p9A4Z5NPm44qJhcy81X6Io75CMTLZvklK6SCkHJn59S0rZLgN1BwBFkn3tQMrHUAHANillrJTyNnANTWBJ3v594ApQG3BLvOYnNZM7G9HMnaTW76VSSg8ppYe1tXUGuvvuG+g2kEFummDy7YmUI5PkTMqVpfD30yj9zz9Y9ulD5L//EtC5MzMPL6JSzCP6rDzL3dBIHfYesCoDLeaD/0k4OFW3bSuK8tYykiLFQQjxpxDioRAiWAixRQjhkIG6zwBlhBAlEifPPwO2v1ZmK+CZ2I4VmkddtxLbzJN4vQBQC02QCQQchRAvI0NDIO31rR+gga6aYLLdb/sbgwmAoa0NNiOGU+bgAWzHjUMGBjD+3Gr04mLoufwMjyNjdNTzRC4doHIPODYXru/VbduKoryVjDzaWo4mABRGM8exI/FauhJ3ww9G81jMF9gopbwihJgshGiZWGwPECqE8AEOAqOklKFABeCUEOIicBiYLaW8lDg6mQQcSZw/cQPU1ujXDHQdyBduX2Q4mMB/mYftZ86AgHv8KrwJePKCvr+f1f1mxSbTwdYJ/uwP4TrOUqwoSqZlZPmvl5TS7U3XcrP3eflven6++DOLvBbRslRLJtecjL6efobuuz92HOHbt+M/bTH9TjylmYsdCz9zR08vtWkvLXl0A5bWA9uK0GMX6KtkCoqia9m5/PeREKKLEEI/8dUF0PHONeVt9Hftz2C3wWz328744+MzNDIBsP1qFPrm5pT5fQFfNyrDLu8gZuy+quXeviZpvuQUHJii27YVRcmUjASSXmiW/j4AgoD2aNKmKO+A/q79+dL9S3bc2pHhYKJvYUGhb8YRdfky7e8ep2v1Yvx85Bar/r2j9f6+wrk9VO4Jx+fD9T26bVtRlAzLyKqte1LKllJKaymljZSyNZrNico7op9Lv0wHk/xNmpCvfn1C5i9grFt+GpS3YcL2K/zjE6yDHifT5HuwdVbzJYqSi73tCYnppkdRcp9+Lv0Y4j6EHbd28M3xb94YTIQQFPp2PEJfn5DJk1jQyY2Khc35ct0FvAOe6KjX/JePKz42cX9Jxs9dURRFN942kOhw1lXJLn1d+jLEfQg7b+1k3PFxb14aXKgQNiP/R+SJf4ndtZPfenhQMK8RvVacxT9Mh8f0WpX+b75k/2TdtasoSoa8bSDR8fmsSnbp69KXoZWGsuvWrgwFE4tPPyVP5coEz5hBwegIVvaqQkxcPD2Wnyb8uQ5HB87twaMXnFgA13brrl1FUd4ozUAihHgmhHiayusZmj0lyjuqj3OfpGAy9tjYdIOJ0NPDbspk5PPnBE+bRmmb/Czt5oF/2Av6rTpLdJwO95g0Tpwv2ToAnvi/ubyiKDqRZiCRUuaXUpql8sovpTTQZSeV7PcymPx1+y/GHhtLXELaua2MS5bEatBAnv71N88OHKR6SUtmdXDh1O0wRm3yJiFBRwNUQxNNPq74ODVfoii5yNs+2lLeA32c+zCs0jD+uv0X446NSzeYWPbujXHZsjyYNIn4iAhaudkzqnE5tl+8z+y913TXactS0HI+BJyG/ZN0166iKGlSgeQD19u5d1IwSW9kIoyMsJs6hbiHDwmZMweAQfVK0alqURYf8mPtqXu667RTO/DoDScWwrW/ddeuoiipUoFEobdzb4ZXHs7ft/9ON5jkcXGhYLeuPF67jufnziGEYEqritQrZ834bZc5eO2h7jrdeBoUcoY/1XyJouQ0FUgUAHo59UoKJsMPDed5bOrLe62HDsXQ3p6g8d+SEB2Ngb4eizpXonyh/Hyx5jyXA8N102FDE+iwEhLiYXNPiNNxlmJFUZJkJI18aqu3/BNTy5fURScV3ejl1Itx1cZxNOAo3f7uRlBEUIoyeqamFJo4kZhbtwj9+WcA8hkbsKxHFSzyGNJzxRkCn7zQTYctS0HLBRBwRs2XKEoOysiIZA4wCk0KeQdgJPALmjPYl2mva0pO+Kz8ZyxusJjAiEA67eqEd4h3ijL5an+EeauWPFr6C1HXrgNga2bCil5ViYqNp+fy04S/0NGKKqe2UKUP/LsIrv6lmzYVRXlFRgJJEynlz1LKZ1LKp1LKpcAnUsoNQAEt90/JATXta7LmkzXkMchDz909+ft2ygltmzFj0DczI2j8eGS8Zi9JWdv8/NylMrcfRTJg1Tli4hJ00+FG30EhF9g6EJ7ocNJfURQgY4EkQQjRUQihl/jqmOx7aof7e6qkRUnWNluLs7UzXx35ih+9fiT52TUGBQpgO3YsUd7ePF6zJul6zdJWzGjnwr+3QhmzxZs3nXeTLQxNNPm4EuJhk5ovURRdy0gg+RzoCjxMfHUFuiQehTtYi31TclgBkwL80vAXWpduzZKLSxh1ZBRRcVFJ3zdr9gl569bh4dx5xAQEJl1vW8mBEQ3L8seFQOb+c0M3nbUsBa0WQuBZNV+iKDqWkTTyt6SULaSUVomvFlLKm1LKF1LKY7ropJJzDPUNmVxzMiMqj2Dvnb303N2TkOchgCZDsN2ECQgheDBx4iujjy/rl6ajhwML9t9g4xkdLc+t2Aaq9E2cL9mlmzYVRcnQqi2HxBVaD4UQwUKILUIIB110TskdhBD0dOrJfM/5+IX70WlXJ3xDfQEwLFwY6xEjiDx2jKc7drxyz3dtnKldxoqxf17iyPUQ3XS20VSwc9XMlzy+q5s2FeUDl5FHW8uB7WgSNdoDOxKvKR8Yz6KerGq6CiEE3Xd3Z/+9/QAU6PQZedzcCJ72PXFhYUnlDfX1WPx5JUrb5GPQmvP43H+q/U6+nC+RUu0vURQdyUggsZZSLpdSxiW+VgDWWu6XkkuVK1iOdc3WUcaiDMMPDue3S7+Bnh52U6cQHxlJ8LTvXymf38SQ5T2rkM/YgF4rzhAUroM9JgVLQsuFEHgO/pmo/fYU5QOXkUDySAjRRQihn/jqAoRqu2NK7mWVx4rfGv9Gk+JNmHd+Ht8c/wZRoihW/fvzdOdOIg4ffqW8nXkelvesQkR0HD2Xn+FZlA72mFRsDVX7wckf1XyJomhZRgJJL6Aj8AAIAtoDPbXZKSX3MzEwYUadGQxyHcR2v+303dsXvW7tMCpdiqCJk4iPiHylfAU7M37qUombDyMYtOY8sfE62GPSaCrYuan5EkXRsoys2ronpWwppbSWUtpIKVsDbXXQNyWXE0Iw0G0gs+rM4kroFT7f14P4rwYQ9+ABIfPmpShfu4w109o6c/TGI8b+cUn7e0wMjNV8iaLowNsmbRyRrb1Q3mlNSjRheePlRMdH0z3gO1609uTxmjU8v3AhRdmOHkUY0qAMm84FsPDATe13rmAJaLUocb5kgvbbU5QP0NsGEpGtvVDeec7Wzqxrtg6H/A4MLHmUGMv8BH0znoSYlKOA4R+XoW0le+bsu86WcwHa75xjK6jaH04uBt+d2m9PUT4wbxtIVGoUJYVCeQuxsslKqpfyZHb9CGL8/Aj5eUmKckIIprd1oWYpS0Zv8eb4zUfa71yjKVDYHbYOgsd3tN+eonxA0gwkaaSPfyqEeIZmT4mipGBqaMpcz7lUatWHo46CkCVLeOTjlaKckYEeP3WpTEnrvAxYdY5rD55pt2MGxtA+cfuTyselKNkqzUAipcwvpTRL5ZVfSmmgy04q7xY9ocfwysOxGzeW50aSM8N6cufxrRTlzPMYsrxnVfIY6dNz+WmCn0alUls2ejlfcv887PtWu20pygdEnZCoaE2Lyl0wGjGA4vei+HVyB04HnU5Rxt4iD8t6VCH8RSw9l58hIjr1Y36zjWNLqDYATv0EvjveXF5RlDdSgUTRKtcuQ9Cv7kH7/S8Yu7kfm69vTlHGyd6cRZ9X4lrwM75Yc544be8xaTgZCleCrV9A2G3ttqUoHwAVSBStEkJQfOp0TPRNGHEoL5NOTGTmmZnEJ8S/Us6znA1TWztx+HoI47dd1u4eEwNj6JA4X7K5J8RFa68tRfkAqECiaJ2Rgz02w4dR4koYX4XXZJXPKoYcHEJETMQr5TpVLcoXnqVYd9qfxYf8tNupAsWh9Y9w/4KaL1GULFKBRNGJAp9/jomLC9XWX2ai4wiOBx6n699dCYwIfKXcyEblaOVWmFl7rrHNKzCN2rJJhRZQbSCcWgLbv4SglOfTK4ryZiqQKDoh9PWxmzKF+GfPqLH5Kj99/BPBz4PpvKszXg//Wx4shGBmexeqlSjIqE3enLyl5fygDSdD5Z7gvRF+rg2/fgxeayFWB1mKFeU9oQKJojMm5cpi1a8v4du24+wXz5pP1pDPMB+99vRih99/K6iMDfRZ2tWDopam9Pv9LDcfanGPiYERtJgH/7sKTaZDVLgmyeMP5WH3WHiko6OCFeUdJrSeOC8X8PDwkGfPns3pbihAQkwMt1u3QUZFUXLHdp7qxzLi8AjOPDhDX+e+DHYfjJ7Q/H3jH/acNotPYGygx59f1MQmv4n2Oygl3DkGZ5dplgcnxEKJOuDRC8o3B31D7fdBUXIJIcQ5KaXHm8qpEYmiU3pGRthNmUzs/fuELFiAhYkFP3/8M+3KtOOXS78w8vBInsc+B6BIQVOW9fAgLDKG3ivOEqntPSYAQkCJ2ppVXSN8oMG3EHYHNvWAuRVh/xR4ck/7/VCUd4hWA4kQookQ4poQ4qYQYkwaZToKIXyEEFeEEGsTrxUTQpwTQnglXh+QrLyREGKpEOK6EOKqEKKdNt+Dkv1MK1emQOdOhP2+ihcXL2Kob8iEGhMY5TGKf+7+Q4/dPQiODAbAxcGCRZ3duXI/nCHrLmh/j0ly+Wyg9v9gqBd03qTJ1XX0B5jvCms/het74LVlzO+Kh8+idPtZKu81rT3aEkLoA9eBhkAAcAboJKX0SVamDLARqC+lfCyEsJFSPhRCGCX2LVoIkQ+4DNSUUt4XQkwC9KWU3wgh9ICCUsp0s/6pR1u5T3xEBLeaNUff3JwSmzchjIwAOBJwhFGHR5HPMB8LGiygomVFAFadvMv4rZfpUr0oU1o5IUQOJaB+cg/O/655RQSDeVGo3B3cu0J+25zpUwZFxcazyzuIVSfvEnjtNs/MClLR3gJne3PNy8GcUtb50NdTyb0VjYw+2tJmIKkBTJRSNk78+msAKeX3ycrMBK5LKX9Npx5L4AJQPTGQ+APlpZSRad3zOhVIcqdnBw4SMGgQ1kOHYDVwYNL164+v8+X+LwmLCuO7j76jUfFGAHz/ty8/H77F103L079uqZzqtkZ8rOYI37PL4PZh0DPQLCf26AXFa2sekeUSd0MjWXPqHhvP+vM0Mpr/+e2h/uX9hBYpw/aqrdipb8/zGM3IytRIH0c7M5wdNMHFxcGcElYquHyockMgaQ80kVL2Sfy6K1BNSjk4WZmtaEYttQB9NIFnd+L3igC7gNLAKCnlj0IIC+ASsAmoB/gBg6WUwen1RQWS3CtwxAie7fuHEtu2YlyyZNL10BehDD04lIshF/nS/Uv6OvdFShiy/gI7vYNY2MmdFq65JAn1oxtwbgVcWA1RT8CyjCaguHWCPAVypEvxCZKDVx+y6uRdDl8PQV9P0Ly0Gb0OLcfo9AnyN23CC6+LxAUFYVqjBtHd+3Mpvz2XAsO5FBiOz/2nvIjVBJe8RvpULGyeFFycHcwpYZkXPRVc3nu5IZB0ABq/FkiqSim/TFZmJxCL5kx4B+Ao4CSlfJKsTGFgK9ACiAdCgPZSyi1CiBGAu5Syayrt9wP6ARQtWrTy3bvqzO7cKO7RI/yaNce4dGmKrfodoffftF10fDQTTkxg161dNCvZjEk1JyETDOj62yku+oezuk81qpYomIO9f03sC7iyFc7+BgFnwMAEnNppgop9ZZ2MUh5FRLPhjD9rT90j8MkLbM2M6VS1KB2LGBL11XCib96k0DfjKNCpEwnR0TxZv55HS34m/vFj8jdsiPWwoRiXKkVcfAJ+IZGawBLwhEuB4Vy5/5ToOM28Sj5jAyoWNksKLM725hRXweW9kxsCSUYebS0BTkopVyR+vR8YI6U881pdy9GMTrYAEUB+KWVC4qhlt5SyYnp9USOS3O3JH38SNHYshSZ8S4FOnV75npSSXy/9yoILC3C1dmWe5zz0E8xo99MJQiNj+GNQTUpZ58uhnqcjyBvOLddsdIyJgEIumoDi3AGMs7e/UkrO3X3MqpN3+etSELHxkpqlLOlavRgfO9oSd+Uy/oO+QEZFYT9vHvk+qvXK/fEREYStWEnY8uUkvHiBeevWWA/+AsPCr4744uITuBkSgXdAOJcDw/EOCMc36L/gkt/YgIr2Zrg4WOBkb46LvTnFLE1zbj5LybLcEEgM0Dy2agAEopls7yylvJKsTBM0E/DdhRBWaOZC3IA8QKiU8oUQogBwCmgnpbwkhFgPLJVSHhBC9ACaSSk7pNcXFUhyNykl/r178+KiNyV37cSwUKEUZfbd3cfYo2MpYFKARQ0WYZLgQJvFxzE11uePgbWwzm+cAz3PgOhnmmBydhkEXwaj/OD6qSao2Kb7988bRUTHsfVCIKtP3uXqg2fkNzGgfWUHPq9WjNI2mmD1dPdu7o8eg4G1NUWW/IRx6dJp1hf3+DGhPy/l8dq1ICUWnT7Dqn9/DCwt07wnNj6BG8ERmsAS+IRLgU/xDXpKzMvgYmLwymS+s705RQuq4PKuyPFAktiJT4B5aOY/lkkpvxNCTAbOSim3C81P0w9AEzSPrb6TUq4XQjRMvC7RnA+/SEq5NLHOYsAqwALNY66eUsp0F/arQJL7xfj7c6tFS/LWqIHD4h9T/UVzJfQKQ/YPISI2gpl1ZmKOK58t/ZdyhcxY37c6eYz0c6DnGSSl5nHXmd/gyp8QHw1FqmsCimMrMMz4Zsvrwc9YffIuf5wPJCI6Dkc7M7rVKEZLt8KYGhkkNicJ/flnQubNJ0+lSjgsWohBwYw9BowNCiLkxx8J/+NP9ExMKNijOwV79kQ/f/6M3R+fwPXgZ1wKCE+ac7ka9IyYxOXG5nkMcbI3wzlxxZiLgzkOBfKo4JIL5YpAkluoQPJuCF22nIczZ2I/dw5mTZumWiY4MpghB4fgG+rL/zz+RyHZiAFrzvNxBVuWdKn8bqwueh6myed1dhmE+UGeguD+uSbnl2Xqq9Fi4hLY6/OAVf/e5dTtMIz09WjuYkeXGsVwL2Lxyi/hhJgYgr75hqfbd2DWsgV2U6eil7i8OjOib90mZMECnu3ejb6FBZb9+lGgcyf0TDKfYSAmThNcvJOCyxOuPXhGbLzm94+FqSHO9uZJj8Sc7FVwyQ1UIElGBZJ3g4yL486nnxH74AGldu1E38Ii1XIv4l4w7tg49t3dR7sy7SiS0JkpO2/Qo2ZxJrRwfHd++SQkwJ0jmoBydRckxEHJeuDRG8o1BX1DgsJfsO7UPdad8SfkWTRFCubh82rF6FDZAct8KR/nxYWFETD4S16cP4/1sKFY9u+f5c/jxeUrhMydS+Tx4xjY2mL1xSAs2rZFGGTtxO3ouHiuPXiWOKGvCTDXHjwjLkHzO6mAqSHODhY4vxy9OJhT2Nzk3fnv+x5QgSQZFUjeHVFXr3K7XXvMW7Wi8LTv0iyXIBNYdGERv1z6hSqFqmAf3Z9VJx7xTbMK9KldMs37cq1nD+D8Ks0y4qcBROexZZ9JI6YHVyNQFqR+ORu6VC9GnbLWaY66om/exH/AQOJCQig8YzpmTZpkaxcjT50mZM4cXly8iFGxYlgPG0r+xo1fWWmXVVGxmuDiHRjO5YBwvAPDuR78jPjE4GKZ10gzanEwT/rfQmYquGiLCiTJqEDybnk4Zy6hS5dSdNlv5K1ZM92yO/x2MOHEBOzy2mEVOYAjPnos7lyJps52Oupt9gl/HsvmM7fx+3crH0fuop7+RUAQVbIhpjX6Qan6kMYv7YhjxwkcNgxhYkKRxT+Sx8VFK32UUhJx8CAhc+cRfeMGxo4VsBk+nLwffaS1X+ZRsfH4Bj1NWil2KTCcGw8jkoKLVT6jZBP6mnkXWzNjFVzQPOZ8m8eaL6lAkowKJO+WhKgobrdqjYyPp+SO7ejlyZNuea+HXgw9OJSY+BjMn/bmdoA9a/tWo3KxXLTHJB2XAsJZdfIO2y/eJyo2gcrFCtC1ejGaOkRjfHEVXFgFkSFgUQw8eoJbF8hnnXT/43XreDD1O4xLl6bIT4tTLNvVBhkfz9OdOwlZsJDYwEBMPTywHjEC00ruWm8bNMHFJ+jpfxP6AeHcePiMxNiCdX7j/4JL4sjFxkwH2aNzgYToaCIOHiJ8xw5eeHlR+sB+9IzfblWjCiTJqEDy7ok8fZp73bpTsFcvbL8a9cbygRGBDN4/mNvhtzF52pbosOr8MagWJazy6qC3mRcVG8/OxLxXF/2fkMdQn9bu9nSpXpSKhc1fLRwXA1d3wH15MOwAACAASURBVJllcPcY6BmCYyukew+C1x/l8apV5KtXj8KzZ6OfT7fvV8bE8HjTJh79tIT4R4/I5+mJ9bBhmJQrq9N+ADyPicM3Mbh4B2r2utx8GJEUXBwK5GFqayfqlbPRed+0TSYk8PzMWcL/3959h0dVbQ0c/q1U0iEhoUMoUUSQIiAKqIAgLQEBERSuhSIoioJ86rVR7AWlCKigKMVQFCGAIqg0pUtHQYEAoaVAep2Z/f1xgneAYEKmpez3efIkM3PK2pnMWTn77LN2zArSfliDJT0dj9BQAnv2pPKIx3EPCip8IwXQicSKTiSl09lXXyN56VLCFy3Cp0njQpdPz03n+U3PszFuI25p7aiY1ZdlT9xJsF/xT+3tLTYxgwXbTrBkVxzJmXnUD/VjcJs69Lm1JoEVijDXScJh2PkF5u0LOb3enYyzFQi+tzlhb0xD/K99v4ejWTIzuTBvPkmzZ2NJTyewZ09Cn34Kr1q1XBYTGMnl0JlU9sWlsGjHKQ6fT2PEXfUZ2+UGPN1L/ywa2UeOkBoTQ0rMSkznzuHm60tAly4E9YrCt3VrxN22IfE6kVjRiaR0MqemGhWCQ0Kou2Qx4ln4gdZsMfPBrg+Yd2gelowbaMBIFg3rQAVP191jYrYofs6ve7XxSAIebsK9N1dlUJs6tKkXfN19+XmnT3Pq8cfJOXaMqh0DqFT5T/D0tSrH0sJBLSmcOTmZpDlzuDBvPspkolL/+wkZMQLPMNefBWTnmZm48hALt52kRe2KTB3YnJqVfF0d1nXLO3+e1JWrSImJIefPP8HdHf927QiMiiSgY8dCu4Kvh04kVnQiKb3S1q0jbtRThI4ZQ+Xhw4q83tIjS5m05XVMOSG09nmOOQ91dXodqIS0HBbvvLzu1YOt6zCgdS2qFLO/PmvPHk49OQqVm0vNKR8ZgxHO7IadX8D+JZCXCdWaQashRmLxck3XXt75eBJnzSR5yVLEw4PgwYMJGTqk2F0s9hSz9wwvfrsfdzfhvX630OXmqysplDTm9HTSflxLSswKMrduA6Wo0PQWgiKjCOzercg3m14vnUis6ERSusU9PZr09euNCsF16xZ5ve1nt/PEutFk5Vq4J/j/mHKf4+dAU0qx88RF5m05wfcHjLpXbRsYda863VTFpu6UlFWrOPvif/GoUoVan8y6rFoyYMw3v2+xcfd8wh/gHQRNBxgX6MNusrFlxZN78iQJU6eRumoVbgEBhAwdSvDgQXb9r7k4TiRlMGrhbvafTuGRO8J5sXtDvD1KVmUElZdH+ubNpMbEkPbTz6icHDxr1yYoMpKgyJ54hYc7PAadSKzoRFK65cXHc6xnJBVuvJHaX869rvsWYlNiGbhiOGnmeLpWGcX73YY6JMai1L0qLqUUiTNmkDhtOj4tb6XmtGl4VPqX8vRKwcmtxo2Oh74Dcy7UaWt0e90UCR7Or0uWffgwCR9+RPr69biHVqbyyJFU6tfvnwnNXCHHZOad7w/z+a/HaVwjkOkDWxDu4sEZSimy9+4lZUUMqatXY05Oxr1iRQK7dycoKpIKTZs6dVizTiRWdCIp/ZKXLuXsy69QdeIEKvXvf13rXsxKIXLxcFI4RIeq/fmoy0u4iX0utB4+Z9S9WrbbqHt1c/VABre5vO6VLSw5OZx96WVSV64kqHdvqk6ccH33BWQkwp4FRtfXxePgWxmaD4JbH4Hgop/d2Uvm778TP3kyWTt34VmrFqFPjSKwRw+bLwrb4seD5xi3dB9mi+LNPk2IcsE8N7mxsaTErCQlJoa8kycRb28COnUkMDIS/3btinR90BF0IrGiE0npp5Ti5COPkn3oEPVWrsSzyvVdvE3Lzube+WNJ89xIi8rtmNnlA3w9i3ehNddkYc3Bc8zbeoLtxy/g5WHUvRrcpg7Nrqh7ZQtTUhJxT44ia88eQseMIWTY0Mu2rZQiy5RFam4qKTkppOWmkZqbanzlGN//eS4nhdTUOFLTz5CWl4lJ4PFKLXgw8nPEw7lnBUopMjZtIv7Dj8j54w+8IyIIffZZ/Dvc7bKbCE8nZ/H017vZdeIiA1vX5rXIRg4foGG6cIHU1d+TErOC7L37QATfNrcRFBlFQJfOuPvbYbqB3EzwKv6AAp1IrOhEUjbknjjBsahe+N/ZnprTpl33+glp2fSY+zZZAd9SN6gBn3aZQVW/ol9oPZOcxdfbT/L19lMkpht1rwbdVof7W9Yq9hBji7KQnpf+z4H/0sE/58hf1Jj0FZ7JGWwf1oY/b6n0vyRxKUHkpGJSpmtuWxACvAII8Aog0CuQQO9A4zsexJ3ewjZTMp3NXkzoMZeAKk2KFb8tlMVC2g8/kDBlKrknTuDTrBmhY57Fr3Vrp8cCRtXiyWuPMHP9UW6sEsD0B5sTUaVoFY+LypKVRdpPP5MaE0P65s1gNuPdsCFBkZEE9uyBZ5Uq9tmROQ/Wv21cMxuxsdgzdepEYkUnkrIjafZs4t//gBpTpxDYpct1r380IZ0+X8xBhc6nkq8f0ztOo0notQ+iFovi16OJzNtygnV/nEeBUffq9jrcFRGKm5tgspis/vO/4mB/xXNXPk7PTUdx+Wew6VELz35nIccTPrjfi8S6Ff+XDC59eQde/lx+krBOGv6e/tfswrMoC1/+/H9MOfUDNcwWPmg0nIa3P3Pdv097UHl5JH+7jMSPP8YUH49fu3aEPvsMPjfbNl9LcW04ksCYRXvIzDUzsdfN9Lu1pk1nSspsJnPbNlKWryBt7VosmZl4VK1KUGRPAntG2v/mzcS/4Nthxmi+5oOg69vgXbyEqBOJFZ1Iyg5lMnG8f39MCQnUX7myWMNJd8ReYNBXy/Gr9RVunmlMajuJjrU7kprzv4P/2bQL/HQ4ls3HTnEhOwUf71zCw4SwIAsmMi9LCpmmzH/dn7e791UH+UsJ4Mrnglduw3v6fNwj6lF1+hQCatZ1aHfP70d/YNym50lWZl70qUffXvMQH9cM0bVkZ3NxwUKSPv0Uc0oKAd26Evr009c1Us9ezqdm80z0HrYcS6JP8xpM6t0YP++iX/NSSpHzxx/GRfNVqzAlJODm709A13sJiozCt1VLuxa7zN+pMcBizUvG/DaRU6FRlE2b1InEik4kZUvWwYPE9n+Ain3uo9qkScXaxsp9Z3hq0Saq37iYVHWk0OV9PXyvPgso4MwgyDvoqgTh7V74KCllMnH+zbe4uHAh/h07UuO9d3Hzc84IoguZCbwY8xC/ZZ+lZy680nkmvuHtnLLvgpjT0rjwxRckzf0SlZNDxT73UfnJJwucOdOhcVgU03/+myk/HSE8xI/pD7agUfXAf10n7/RpUlauIiVmBbl/HwVPT/zvupOgnpH4d7i72DWvCpUeD8tHwV9rjOKevWZAoO2FS3UisaITSdkT//77JM2eQ+25c/Frc1uxtvHJhqO89cMB2rc4QiV/Yf/JHE4lCV7ix10RtenbNIIWtaoT4BWAp5vjRs2Y09I4PWYsGZs2EfzYY4SNHeP0UUxmi5nPNr/GjGPLqZuXx+R691O/w3hwc91oKlNiIomffEpydDSIUOmhhwgZPuzfhz47wJajSYyO3k1yVh6v9GzEoNtqX3aWaE5JIXXNGlJXxJCZf5zxufVW47pH13uvOa+O3Rz+3kgiOWnQeSK0Hn7NKtHXSycSKzqRlD2WrCyO9eoNAvWWLy/WrH1KKV5dfpB5W08A0CDMn8Ft6nBfixpFq3tlB7lxccSNHEnO8ViqvvYqle6/3yn7vZatset4fsM4siy5vCKhRPZZCIHOHw5rLe/0aRKmf0zK8uW4+fgQ/NijBD/8iFMLVCal5zBm8V42HEmge5OqvNmzIW7bfyN1RQzp69ej8vLwqluXoKhIAnv2dE6NsdwMoxtr1xdQpQn0/czuN57qRGJFJ5KyKWPrVk4+8ighw4YSNnZssbZhMluYt/UEDasGFqvulS0yf99N3KhRKJOJmlOn4NemjdP2/W8SMuL5v+8fYWfGKfpm5vLCXe9QoVFvV4dFzt9/kzBlCmlr1+EeHEzlEY9TccAAm+bbuB5mk5nFc1dybul3tD+zF7/cLNwrVyawezeCIqOo0Phm5/39nN4F3wyDC8fgjqeg48sOudFUJxIrOpGUXWdefpmUZd9Rd8liKjRq5OpwiiwlZiVnX3oJj2pVqTVzFt71nH9B+d+YLCZm/PY6nx39hhtycplctQN1un0Inq4tbQKQtW8f8R9+SOaWrXhUr0bok6MI6hVl89S/15Jz9Khx0TwmhrwzZ1DeFdhaowk/VGtGl8GRDLmrgfMSiNkEmz+EDW+DfxW4bxbUvdNhu9OJxIpOJGWXOSWFoz164hkWRvjiRQ47mNiLUorEadNJnDED31atqDF1itP7/K/HphM/8+KG5zCZc5iQ48O9930FVUpGws747TfiP/yI7P378apXj9DRowno0tkuB/W8+HhSV68mdUUM2YcOgZsbfnfcQVBUJAGdOpEmXoxbupcfD52nU8Mw3r+/KZUcPV3BheOw7HE4tc0oyNnjg2LfH1JUOpFY0YmkbEv9YQ2nn3mGsHHPETJkiKvDuSZLdjZn//tfUld/T1CfPlQb/5pLa00V1bmMc4xdM5R9aScYmJbJcy2fw+u2EVACprJVSpG2dq1xU+PRo1Ro0oSwZ58pdIrmglgyMkhbt46UFTFkbNkCFgsVGjc27vfo3h2P0NDLlldK8eVvsby5+k9C/L2YOrA5rcIdUIVXKdj7Naz+P+N33mMy3OKca2k6kVjRiaRsU0oR99RTZGzaTL0Vy/GqU8fVIV3FlJholDvZu5fQsWMIGTrUZeVAiiPPnMdH297iq7+WcHNODu/7N6Fmr0/Bz3WTaVlTZjMpy1eQMH0apjNn8W3ThrAxzxY6d70ymcj47TdSVsSQ9tNPqKwsPGvUIDAqkqDIyKsrLBfgwOkURi38nVMXsxjT+QZG3lXfflMWZF6Alc/AoeVG4c37ZkHF2vbZdhHoRGJFJ5KyL+/8eY716EmFxo2p/cXnJeognX34CKdGjsB84SLV332nWHfklxQ/xa7llU0vgCmbN9ItdOgxC+rd5eqw/mHJzSU5OprEWZ9gvnAB/3s6ETZ6NN4REf8so5Qi+8CB/1XYTUrCLSiIwG5dCYqMxKd58+u+WTAtO4//LjtAzN4ztGtQmckPNCUswMY54o/+DN89YRTe7PiycVHdycOxdSKxohNJ+XAxehHnxo+n2huvU7Gv4+ceKYr0DRs4/ewY3Pz9qTljBj6NXVP2w55OpZ1i7Non+CMtlkeSU3m60cN4dnwF3F1TobYg5vQMLnz1JRc+/wJLZiZBUVFU7N+fjK1bSF0RQ25sLOLlhX+HDgRFReLXvr3No7+UUizacYrXVhwkoIInHz3QjHYRla9/Q3nZ8NME2DoDKt9oDOut1tSm2IpLJxIrOpGUD8pi4eR/Hib7yBHqr1p5VZ+2U2NRiovz5nP+7bfxbngjtWbOtF9BvhIgx5zDe9veYtFf39AsO4f33KpRte8XEFx4V5AzmS5eJOmz2VxcsACVkwOAb6tWBPWKIqBLF9wD//1O9eI4fC6NUQt/5++EdEZ1aMDoThF4FHVCs3MHjDpZ8YeMGws7T3TpSDmdSKzoRFJ+5Bw7zvHevfHv0IGaUz5ySQzKZOLcG2+Q/HU0/vd0osa77+LmW/rmBi+K749/z/jNL+Odl81bFzNoe8870PQBV4d1lbxz58j4bQt+bW7Ds7rjb7DMzDUxfsVBFu+Mo3V4MFMGNqNa0L8kBIvFOAP5aYIxEqvXxxDR2eFxFkYnEis6kZQvibM+IeGjj6g5fRoB99zj1H2bU1M5/ewYMn79lZChQwgdM8b+xflKmOMpxxn789P8nRLLsOQUnqh1L+49PoAK9v9vv7RZtjuOl5YdwNvDjQ/6N6VjwwLOSlNOw3cj4PhGaNgTIqeAXzG6xBxAJxIrOpGULyovj+P97sd88SL1Vq3EPcC+c0pcS+6pU5waMZLcEyeoNv41Kvbr55T9lgRZpize2voGy44up3VWNu/k+lC5z+dQs9BjUJl3LCGdJxfu5o+zqQxrX5dx9zbEyyP/n4sD3xqjsswm6PY2NB9cIoZVX1LURFK2/1XSyiXx9KTa65MwJSYS//4HTtln5q5dxPZ/AFNiIrXnzClXSQTAx8OHie1eZ1LbSezzC6RfgIUdCyJh02Sj26Ycqxfqz7In7mBwmzp8tuk493+yhbiz5+Dbx2HpoxASASM2QYv/lKgkcj10ItHKJJ8mTQj+z39IXrSIzB07HLqvlOXLOfnIo7gHBlJ3UTR+t7lmhr+SoHeD3izsGU1AUB2GVq3MZzs/xDIvClLPuDo0l6rg6c6k3o2Z+VALKibsQD5ph2X/ErjrBXhsDYTUd3WINtGJRCuzQp9+Cs+aNTn7yqtY8kfs2JOyWIj/6CPOPP8CPi1aEL4oGq/wcLvvp7SJqBTBosgl3BvejanBFXki+y8uzmoLf652dWiuZcql2/lPmct43Nw86Jf9Cq+kRJJtKZ1nIdZ0ItHKLDdfX6pOGE9ubCyJM2badduW7GxOjxlL0qxPCOrXl9qffer4eSdKEV9PX9658x1eafMK2319uT80gD3LHoZVz0FelqvDc76EIzDnHtg8GWk+iJCx27i13b3M23qC+2b8xrGEdFdHaBOdSLQyzb9tW4J69yZpzhyy//zTLts0JSRw4j8Pk7ZmDWHjxlFt0qRSUTPL2USE/jf2Z373BXgGVufR6tX48nA06rMOcP6Qq8NzDqVg+2fwyZ2QfAoemA+9puPlF8RLPRrx+SMtOZeSRc9pm/lu92lXR1tsetSWVuaZLl7kWM9IPKtVI3xRtE2zD2b/+SenRj6BOTmZGu+96/ThxaVVWm4ar/76KutOrqNDjplJCRcI6jwJWg0ttReYC5V2HpY/CX+vhfqdoPcMCLh6uuCzKVmM/noP22Mv0L9lTcZH3YyvV8moYq1HbWlaPo9Klaj60n/JPnCAC1/NK/Z20n75hRMPPgQWC+EL5uskch0CvAKYfPdknm/1PJsqePFAzeocXPdfiH4IMpJcHZ79/bkaZt4OsZug23sw6JsCkwhAtSAfFg67jac6NmDJrjh6Tf+Vw+fSnBywbXQi0cqFgG7d8L/7bhKmTCH31KnrWlcpRdLcucQ98SRedesSvrh0TaJVUogIgxoNYm63LzH7hjC4ZnW+PrsZNautcTNeWZCbATGjIXqgMUXx8A1w2/BCz7o83N0Y2+VG5j12Gxcz84iavpno7ScpLT1GDk0kItJVRA6LyN8i8sI1lukvIodE5KCILMx/ro6I7BKRPfnPjyhgvRUicsCR8Wtlh4hQdfxriLs7514bX+QPqMrL49xr44l/+x0C7rmHOvO+wrNKmIOjLduahjZlSeQS2lRvy5shQYwL8ib9q16wbgKY81wdXvHF7YJZ7WHXl9D2GRj6M4Q1vK5NtIuozPej29MqPJgXvt3P6Og9pGWX/N+JwxKJiLgDHwPdgEbAQBFpdMUyEcCLQFul1M3AM/kvnQXuUEo1A24DXhCR6lbr9QFK9zAHzek8q1YldOwYY/6J75YXurw5JYWTw4eTvHgxIcOGUWPKR2W2ZpazVaxQkemdpvNMi2dY5yUMqBfB4e3T4POuxkyApYnZBBvehTmdwZwLj6yEzhPAo3gDMEIDvPnqsdaMu/dGVu47Q+S0zRw4nWLnoO3LkWckrYG/lVLHlFK5QDTQ64plhgEfK6UuAiil4vO/5yqlLg3897aOU0T8gTHA6w6MXSujKg0YgE+LFpx/+21MiYnXXC735EliBz5I5s5dVHvzTcLGlv2aWc7mJm4MaTKE2V1mk+ntz0M1a/FtZixqVnvYt9jV4RXNhWPwRTf45Q1j+tsRmyG8nc2bdXMTnuzQgOjht5OdZ6HPjN+Y++vxEtvV5chPRg3AujM6Lv85azcAN4jIryKyVUS6XnpBRGqJyL78bbyjlLp0a+wk4AMg03Gha2WVuLlRbdJEVGYm5998q8BlMnfsILb/A5iTkqjz+Rwq9rnPyVGWLy2rtmRJ5BKaV23JaxV9eblaDTKXDTdKiOSU0IvOSsHu+UZXVsJh6DvHmDfEx773ErWuG8zq0e1pH1GZ8TGHeHzeLlIyS15XlyMTSUFXl65Mpx5ABHA3MBCYLSIVAZRSp5RStwANgIdFpIqINAMaKKWWFbpzkeEislNEdiYkJNjSDq2M8a5fn5CRI0hdvZq0X3657LXkZd9x4rEhuFeqRPjiRfi2auWiKMuXEJ8QZt0ziyeaPkGMWxYPRTTm2J/fGgfquF2uDu9ymRdg8WBjaG+1ZjDyV2jiuNpqwX5ezH64JS/3uIlfDsfTfeomfj950WH7Kw5HJpI4oJbV45rAlQV34oDlSqk8pdRx4DBGYvlH/pnIQaA9cDtwq4jEApsxzmbWF7RzpdSnSqmWSqmWoS6c4EgrmSoPHYp3RATnJkzEnJ5ulDuZ/CFnX3wR31tvJTz66xI593tZ5u7mzshmI5nVeRYX3N0ZUKsOKz1M8HmXklP88e+fYMbtcPgHY9Kph1dAxVqFr2cjEWFo+3osGXEHbm7Qf9YWZm04isVSMrq6HHZDooh4AEeATsBpYAfwoFLqoNUyXYGBSqmHRaQysBtoBvgASUqpLBGpBGwD+iql9lutGw6sVEo1LiwWfUOiVpCsvXuJHTCQoL59sKSmkfbjj1S8/36qvvoK4llypo0tj+Iz4xm3YRy/x/9OP/fKvHD0d7zD74T7PoXAas4PKC8L1o2HbbMgtCH0+Qyq3eL8OICUrDxe/HYfq/ef464bQpncvykh/t4O2ZfLb0hUSpmAUcAa4A9gsVLqoIhMFJGo/MXWAEkicgj4BRinlEoCbgK2icheYAPwvnUS0TR78GnalEqDB5Gy9BvS1q4l7PnnqTpxgk4iJUCYbxhz7p3DkMZDWGpOZFDDlpw8+zvMvAMOf+/cYM7ug0/vNpLIbSNg+HqXJRGAIB9PPn6wBZN6N2bLsSS6T93E1mOuvalTl0jRyjVLRgbnJk4koGtXAjp0cHU4WgE2xm3kxU0vYrGYmJgBnc/8Ca2GQZdJjp3P3GKBLdPgp0ngG2yUOGlQsqoZHDqTyqiFvxOblMHoTjcwqmMD3N3sV3JGz5BoRScSTSvdzqSfYdyGcexL3Mcg37qMObgBz7BG0O9zCLvJ/jtMiYNlI4wSJw17QuRU8Aux/37sICPHxMvfHWDZ7tPcXi+EKQOaERZYwS7bdnnXlqZpmr1U96/O3K5zGXTTIOZnHufhJu04k5VodDntmG0Mx7WX/Uthxh1wZjf0+tio2FtCkwiAn7cHk/s35b1+t7DnVDLdpmxiwxHnjlTVZySappUqa0+s5dVfX8UN4U1zAHcd3WqcNURNM7qgiisrGVaPg/2LoWZr6PMJBNezX+BO8Hd8Gk8u2M3h82mMvLs+YzrfgKd78c8X9BmJpmllUuc6nVncczE1AmoyynKGyS2iMB1ZAzNtKP4YuxlmtYMD30CHl+DR70tdEgFoEBbA8lFtGdi6NjPXH2XAp1tJSLP/7KBX0olE07RSp1ZgLeZ1n0f/G/rzxcU9DGl6N+e9feHLKPhpYtGLP5pyYe1rMLcnuHvCkB/hrv8D95IxH0hxVPB0560+TZg6sDkebkJABce3RXdtaZpWqq06tooJWybg416BtzxqcseBVVCjJfSdDcF1r71iwmH4Ziic2wctHoZ73wRvf+cF7gRKKcSGicN015amaeVCj3o9iO4ZTbBPCCMyDvDxHYMxJ/5llFcpqPij9fS3qadhwEKImlrmkghgUxK5HjqRaJpW6tULqseC7guIrB/JrLMbePyWO0ms0hC+HWYM471U/DHtPCzoB6ufg/D2MHILNOzh2uDLAN21pWlambLsr2W8se0NAr0CeDegGS23z4WKdYy70je+a8xi2OX1sj1fvJ3ori1N08ql+yLuY0H3Bfh5+jMk4Wdmd3gKizkPfngegmrC4xuh9TCdROyo9A5N0DRNu4Ybg28kumc0E36bwJTjy/i98R28GXYnFRs/UOyZCy9RSmFWZpRSWLBgtphRKCzK8s/XP69feg7LZa9f9YXlsu2alRmLuvq5S/u5avuXnrsiDouy0DeiL+5u7nb6zRZMd21pmlZmKaVYfHgx7+x4Bx8PH4IrBF91ALdYrj7QWx+4zRbzZQf60mbnoJ14uxevOnBRu7b0GYmmaWWWiPBAwwdoHNqY+YfmY7KYEBHcxR03cUMQ3N3cje/ijojgJm7//PzPc7jhJv/yVcjrV+7HTdwu2/5l8VjFcenrsjjc/mV/Bbzu5WbbGVhR6ESiaVqZd3PIzbzVvuCplTXb6YvtmqZpmk10ItE0TdNsohOJpmmaZhOdSDRN0zSb6ESiaZqm2UQnEk3TNM0mOpFomqZpNtGJRNM0TbNJuSiRIiIJwIlirl4ZSLRjOKWBbnP5UN7aXN7aC7a3uY5SKrSwhcpFIrGFiOwsSq2ZskS3uXwob20ub+0F57VZd21pmqZpNtGJRNM0TbOJTiSF+9TVAbiAbnP5UN7aXN7aC05qs75GommaptlEn5FomqZpNtGJJJ+IdBWRwyLyt4i8UMDrI0Rkv4jsEZHNItLIFXHaU2Fttlqun4goESnVI16K8B4/IiIJ+e/xHhEZ6oo47ako77GI9BeRQyJyUEQWOjtGeyvC+/yh1Xt8RESSXRGnPRWhzbVF5BcR2S0i+0Sku10DUEqV+y/AHTgK1AO8gL1AoyuWCbT6OQr4wdVxO7rN+csFABuBrUBLV8ft4Pf4EWC6q2N1cpsjgN1ApfzHYa6O29FtvmL5p4DPXR23E97nT4GR+T83AmLtGYM+IzG0Bv5WSh1TSuUC0UAv6wWUUqlWD/2A0n5xqdA255sEvAtkOzM4Byhqe8uSorR5GPCxUuoihlMjxgAABRZJREFUgFIq3skx2tv1vs8Dga+dEpnjFKXNCgjM/zkIOGPPAHQiMdQATlk9jst/7jIi8qSIHMU4sD7tpNgcpdA2i0hzoJZSaqUzA3OQIr3HQN/8U/+lIlLLOaE5TFHafANwg4j8KiJbRaSr06JzjKK+z4hIHaAu8LMT4nKkorR5PDBIROKA1RhnYnajE4lBCnjuqjMOpdTHSqn6wPPAyw6PyrH+tc0i4gZ8CIx1WkSOVZT3OAYIV0rdAqwDvnR4VI5VlDZ7YHRv3Y3x3/lsEano4LgcqUif5XwDgKVKKbMD43GGorR5IDBXKVUT6A7My/+M24VOJIY4wPq/z5r8+6lfNNDboRE5XmFtDgAaA+tFJBZoA6woxRfcC32PlVJJSqmc/IefAbc6KTZHKcrfdRywXCmVp5Q6DhzGSCyl1fV8lgdQ+ru1oGhtHgIsBlBKbQEqYNThsgudSAw7gAgRqSsiXhh/YCusFxAR6w9XD+AvJ8bnCP/aZqVUilKqslIqXCkVjnGxPUoptdM14dqsKO9xNauHUcAfTozPEQptM/Ad0AFARCpjdHUdc2qU9lWUNiMiNwKVgC1Ojs8RitLmk0AnABG5CSORJNgrAA97bag0U0qZRGQUsAZjBMTnSqmDIjIR2KmUWgGMEpF7gDzgIvCw6yK2XRHbXGYUsb1Pi0gUYAIuYIziKrWK2OY1QBcROQSYgXFKqSTXRW2b6/i7HghEq/xhTKVZEds8FvhMRJ7F6PZ6xJ5t13e2a5qmaTbRXVuapmmaTXQi0TRN02yiE4mmaZpmE51INE3TNJvoRKJpmqbZRCcSTbORiIwXkedKQByx+feCaJpT6USiaZqm2UQnEk0rgIj4icgqEdkrIgdE5AHr//hFpKWIrLdapamI/Cwif4nIsPxlqonIxvx5Lw6ISPv852eKyM78+T8mWO0zVkTeFJEt+a+3EJE1InJUREbkL3N3/jaX5c8hMqugmkkiMkhEtufv+xMRcXfk70sr33Qi0bSCdQXOKKWaKqUaAz8UsvwtGKVzbgdeFZHqwIPAGqVUM6ApsCd/2ZeUUi3z17lLRG6x2s4ppdTtwCZgLtAPo87ZRKtlWmPcqdwEqA/0sQ4kvwTGA0Db/H2bgYeuo+2adl10iRRNK9h+4H0ReQdYqZTaJFJQkdV/LFdKZQFZIvILxsF+B/C5iHgC3ymlLiWS/iIyHOPzVw1joqF9+a9dKuGxH/BXSqUBaSKSbVWVd7tS6hiAiHwNtAOWWsXSCaPg5I78mH2A0j7PiFaC6USiaQVQSh0RkVsxSm6/JSI/YtTgunQWX+HKVa7ehNooIndinKnME5H3MM40ngNaKaUuisjcK7Z1qfqwxernS48vfV6v2tcVjwX4Uin1YiHN1DS70F1bmlaA/K6pTKXUfOB9oAUQy/9Ky/e9YpVeIlJBREIw5vbYkT9xUrxS6jNgTv42AoEMIEVEqgDdihFe6/xKr24YXVibr3j9J6CfiITltyU4PxZNcwh9RqJpBWsCvCciFoyKzyMxuojmiMh/gW1XLL8dWAXUBiYppc6IyMPAOBHJA9KB/yiljovIbuAgRrn2X4sR2xbg7fwYNwLLrF9USh0SkZeBH/OTTR7wJHCiGPvStELp6r+aVoqIyN3Ac0qpnq6ORdMu0V1bmqZpmk30GYmmaZpmE31GommaptlEJxJN0zTNJjqRaJqmaTbRiUTTNE2ziU4kmqZpmk10ItE0TdNs8v8NPGCmVIr+1QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "找到最佳参数colsample_bytree=0.8, subsample=0.7"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四步：调整正则化参数reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1.5, 2], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 1.5, 2]\n",
    "reg_lambda = [0.5, 1, 2]\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:762: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.63277, std: 0.00611, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.63317, std: 0.00630, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.63409, std: 0.00581, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.63334, std: 0.00709, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.63352, std: 0.00603, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.63389, std: 0.00622, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       " -0.6327686641803477)"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=101,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.7,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([18.59427185, 18.96288633, 18.95849786, 18.78157125, 18.38543029,\n",
       "        16.21125102]),\n",
       " 'std_fit_time': array([0.3939156 , 0.14973083, 0.12350438, 0.05805594, 0.69920355,\n",
       "        0.3469638 ]),\n",
       " 'mean_score_time': array([0.0538559 , 0.05944114, 0.05365663, 0.05206075, 0.05206099,\n",
       "        0.0430788 ]),\n",
       " 'std_score_time': array([0.00362351, 0.01148613, 0.00239363, 0.00039892, 0.00247544,\n",
       "        0.00324882]),\n",
       " 'param_reg_alpha': masked_array(data=[1.5, 1.5, 1.5, 2, 2, 2],\n",
       "              mask=[False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.5, 1, 2, 0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'split0_test_score': array([-0.63689632, -0.63843431, -0.63905307, -0.6390148 , -0.63774095,\n",
       "        -0.63765553]),\n",
       " 'split1_test_score': array([-0.64268152, -0.64270905, -0.64264381, -0.64403425, -0.64321643,\n",
       "        -0.64407183]),\n",
       " 'split2_test_score': array([-0.62940162, -0.62981325, -0.63080492, -0.63045755, -0.63067331,\n",
       "        -0.63100259]),\n",
       " 'split3_test_score': array([-0.6286438 , -0.6287031 , -0.63092687, -0.62825292, -0.62847279,\n",
       "        -0.63015295]),\n",
       " 'split4_test_score': array([-0.62621472, -0.62619096, -0.62699859, -0.62495166, -0.62749665,\n",
       "        -0.62658088]),\n",
       " 'mean_test_score': array([-0.63276866, -0.63317136, -0.63408666, -0.63334364, -0.63352105,\n",
       "        -0.63389387]),\n",
       " 'std_test_score': array([0.00610893, 0.00630276, 0.00581157, 0.00708664, 0.00602805,\n",
       "        0.00622182]),\n",
       " 'rank_test_score': array([1, 2, 6, 3, 4, 5]),\n",
       " 'split0_train_score': array([-0.49282531, -0.49572112, -0.50096321, -0.5014471 , -0.50322217,\n",
       "        -0.50795291]),\n",
       " 'split1_train_score': array([-0.48767669, -0.49121217, -0.49522154, -0.49455624, -0.49820758,\n",
       "        -0.50091282]),\n",
       " 'split2_train_score': array([-0.49268758, -0.49640044, -0.5025908 , -0.50134037, -0.50406661,\n",
       "        -0.50879718]),\n",
       " 'split3_train_score': array([-0.49376814, -0.49670028, -0.5010205 , -0.50143974, -0.50417587,\n",
       "        -0.50816757]),\n",
       " 'split4_train_score': array([-0.49233903, -0.49683176, -0.4997675 , -0.50113833, -0.50323693,\n",
       "        -0.506823  ]),\n",
       " 'mean_train_score': array([-0.49185935, -0.49537316, -0.49991271, -0.49998435, -0.50258183,\n",
       "        -0.5065307 ]),\n",
       " 'std_train_score': array([0.00214417, 0.00211561, 0.00251122, 0.00271634, 0.00222346,\n",
       "        0.00288045])}"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.632769 using {'reg_alpha': 1.5, 'reg_lambda': 0.5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "找到最佳正则参数reg_alpha= 1.5, reg_lambda= 0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 测试模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "同样是只取了1万行测试数据用来测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>54942</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>6000</td>\n",
       "      <td>2000.00</td>\n",
       "      <td>2000.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45016</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5244</td>\n",
       "      <td>2622.00</td>\n",
       "      <td>1748.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>5</td>\n",
       "      <td>30</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53936</th>\n",
       "      <td>3.0</td>\n",
       "      <td>2</td>\n",
       "      <td>8895</td>\n",
       "      <td>2223.75</td>\n",
       "      <td>2965.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59288</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>4000</td>\n",
       "      <td>2000.00</td>\n",
       "      <td>2000.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>5</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70437</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.00</td>\n",
       "      <td>2850.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>21</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "54942        2.0         2   6000          2000.00          2000.0        0.0   \n",
       "45016        1.0         2   5244          2622.00          1748.0       -1.0   \n",
       "53936        3.0         2   8895          2223.75          2965.0        1.0   \n",
       "59288        1.0         1   4000          2000.00          2000.0        0.0   \n",
       "70437        1.0         0   2850          1425.00          2850.0        1.0   \n",
       "\n",
       "       room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  \\\n",
       "54942       4.0  2016      5    3  ...         0     0      0    0       0   \n",
       "45016       3.0  2016      5   30  ...         0     0      0    0       0   \n",
       "53936       5.0  2016      5    7  ...         0     0      0    0       0   \n",
       "59288       2.0  2016      5   18  ...         0     0      0    0       0   \n",
       "70437       1.0  2016      4   21  ...         0     0      0    0       0   \n",
       "\n",
       "       water  wheelchair  wifi  windows  work  \n",
       "54942      0           0     0        0     0  \n",
       "45016      0           0     0        0     0  \n",
       "53936      0           0     0        0     0  \n",
       "59288      0           0     0        0     0  \n",
       "70437      0           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test = pd.read_csv(dpath +\"RentListingInquries_FE_test.csv\") #测试数据\n",
    "test = test.sample(n=10000)\n",
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "# y_train = train['interest_level']\n",
    "# train = train.drop([\"interest_level\"], axis=1)\n",
    "X_test = np.array(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=101,  \n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.7,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        reg_alpha = 1.5,\n",
    "        reg_lambda= 0.5,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=5, min_child_weight=1, missing=None, n_estimators=101,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=1.5, reg_lambda=0.5, scale_pos_weight=1, seed=3,\n",
       "       silent=True, subsample=0.7)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    }
   ],
   "source": [
    "#预测测试数据\n",
    "y_pred = model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将结果放入interest_level列中\n",
    "test['interest_level'] = y_pred\n",
    "#导出带结果的csv文件\n",
    "test.to_csv('test_result.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
